Я расширяю класс сеанса, создав /application/libaries/MY_Session.php
class MY_Session extends CI_Session {
function __construct() {
parent::__construct();
$this->tracker();
}
function tracker() {
$this->CI->load->helper('url');
$tracker =& $this->userdata('_tracker');
if( !IS_AJAX ) {
$tracker[] = array(
'uri' => $this->CI->uri->uri_string(),
'ruri' => $this->CI->uri->ruri_string(),
'timestamp' => time()
);
}
$this->set_userdata( '_tracker', $tracker );
}
function last_page( $offset = 0, $key = 'uri' ) {
if( !( $history = $this->userdata('_tracker') ) ) {
return $this->config->item('base_url');
}
$history = array_reverse($history);
if( isset( $history[$offset][$key] ) ) {
return $history[$offset][$key];
} else {
return $this->config->item('base_url');
}
}
}
А затем, чтобы получить URL последней посещенной страницы, вы звоните
$this->session->last_page();
И вы также можете увеличить смещение и тип возвращаемой информации и т.д.
$this->session->last_page(1); // page before last
$this->session->last_page(2); // 3 pages ago
Функция не добавляет страницы, вызываемые с помощью Ajax, на трекер, но вы можете легко удалить бит if( !IS_AJAX )
, чтобы сделать это.
Edit:
Если вы запускаете с ошибкой неопределенная константа IS_AJAX, предполагается IS_AJAX
добавьте строку ниже к /application/config/constants.php
define('IS_AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');