/** * Initialise session */ function initSession() { switch (ONXSHOP_SESSION_TYPE) { case 'file': ini_set('session.save_path', ONXSHOP_PROJECT_DIR . 'var/sessions'); break; case 'database': default: require_once 'models/common/common_session.php'; $Session = new common_session(); $Session->setCacheable(false); $result = session_set_save_handler(array(&$Session, 'open'), array(&$Session, 'close'), array(&$Session, 'read'), array(&$Session, 'write'), array(&$Session, 'destroy'), array(&$Session, 'gc')); if (!$result) { die("Can't init session!"); } break; } // disable no-cache headers //session_cache_limiter(0); //session_set_cookie_params(31536000);// = 3600 * 24 * 365 session_start(); //to be sure sessions are written before exit register_shutdown_function('session_write_close'); //in PHP5.4 can be used this: //session_register_shutdown(); if (!array_key_exists('active_pages', $_SESSION)) { $_SESSION['active_pages'] = array(); } if (!array_key_exists('full_path', $_SESSION)) { $_SESSION['full_path'] = array(); } if (array_key_exists('HTTPS', $_SERVER)) { $protocol = 'https'; } else { $protocol = 'http'; } $_SESSION['uri'] = "{$protocol}://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}"; $_SESSION['last_item'] = $_SESSION['history'][count($_SESSION['history']) - 1]['uri']; $_SESSION['orig'] = $_SERVER['REQUEST_URI']; $_SESSION['use_page_cache'] = $this->isPageCacheAllowed(); // in the session history we store only new URIs and not the AJAX request (begin with /request/) // and don't store a popup if ($_SESSION['last_item'] != $_SESSION['uri'] && !preg_match('/^\\/(request)*(popup)*(popupimage)*(ajax)*\\//', $_SERVER['REQUEST_URI'])) { $_SESSION['history'][] = array('time' => time(), 'uri' => $_SESSION['uri']); } $_SESSION['last_diff'] = $_SESSION['last_item']; }
/** * main action */ public function mainAction() { require_once 'models/common/common_session.php'; require_once 'models/common/common_session_archive.php'; $Session = new common_session(); $Session_archive = new common_session_archive(); $Session->setCacheable(false); require_once 'models/client/client_customer.php'; // filter if (isset($this->GET['filter'])) { $_SESSION['filter'] = $this->GET['filter']; } $filter = $_SESSION['filter']; if ($filter['active'] == 1) { $this->tpl->assign('ACTIVE_selected_1', "selected='selected'"); } else { $this->tpl->assign('ACTIVE_selected_0', "selected='selected'"); } if (!is_numeric($filter['customer_id']) || $filter['customer_id'] < 0) { $filter['customer_id'] = ''; } $this->tpl->assign("FILTER", $filter); $session_ttl = round($Session->conf['ttl'] / 3600, 1); $this->tpl->assign('SESSION_TTL', $session_ttl); $Customer = new client_customer(); $Customer->setCacheable(false); //pagination if (is_numeric($this->GET['limit_from']) && is_numeric($this->GET['limit_per_page'])) { $from = $this->GET['limit_from']; $per_page = $this->GET['limit_per_page']; } else { $from = 0; $per_page = 5; } $limit = "{$from},{$per_page}"; if (is_numeric($filter['customer_id'])) { $where = "customer_id = {$filter['customer_id']}"; } else { $where = ''; } $count_active = $Session->count($where); $count_archive = $Session_archive->count($where); if ($filter['active'] == 1) { $sessions = $Session->listing($where, 'modified DESC', $limit); $count = $count_active; } else { $session_active = $Session->listing($where, 'modified DESC', $limit); //pagination must be handled differently if (count($session_active) < $per_page) { //start to show archive, but use different "from" $from_archived = $from + count($session_active) - $count_active; $session_archive = $Session_archive->listing($where, 'modified DESC', "{$from_archived},{$per_page}"); $sessions = array_merge($session_active, $session_archive); } else { $sessions = $session_active; } $count = $count_active + $count_archive; } foreach ($sessions as $s) { $s['session_data'] = $this->unserialize_session_data($s['session_data']); if ($s['http_referer'] == '') { $link_block = "referer_na"; } else { $link_block = "referer_link"; } if (!is_array($s['session_data']['history'])) { $s['session_data']['history'] = array(); } foreach ($s['session_data']['history'] as $history) { //temp if (!is_array($history)) { $history = array('time' => 'n/a', 'uri' => $history); } else { $history['time'] = strftime('%H:%M', $history['time']); } $this->tpl->assign('HISTORY', $history); $this->tpl->parse('content.item.history'); } $s['time_diff'] = strtotime($s['modified']) - strtotime($s['created']); $s['time_diff'] = round($s['time_diff'] / 60); $s['created'] = strftime('%d/%m/%Y %H:%M', strtotime($s['created'])); $s['modified'] = strftime('%d/%m/%Y %H:%M', strtotime($s['modified'])); if ($s['customer_id'] > 0) { $this->tpl->assign('CUSTOMER', $Customer->detail($s['customer_id'])); } else { $this->tpl->assign('CUSTOMER', ''); } // show messages if (ONXSHOP_DEBUG_OUTPUT_FILE) { $messages_file = ONXSHOP_PROJECT_DIR . "var/log/messages/{$s['ip_address']}-{$s['session_id']}.log"; if (file_exists($messages_file)) { $s['messages'] = file_get_contents($messages_file); } } $this->tpl->assign('SESSION', $s); $this->tpl->parse("content.item.{$link_block}"); if ($s['messages'] != '') { $this->tpl->parse('content.item.session_messages'); } $this->tpl->parse('content.item'); } //pagination //$link = "/backoffice/advanced/logs"; $link = $_SERVER['REDIRECT_URL']; $_Onxshop_Request = new Onxshop_Request("component/pagination~limit_from={$from}:limit_per_page={$per_page}:count={$count}:link={$link}:option_show_all=1:option_per_page=1~"); $this->tpl->assign('PAGINATION', $_Onxshop_Request->getContent()); return true; }