根据本论坛帖子( http://codeigniter.com/forums/viewthread/138823/ ),我扩展了 CI_Session 类以处理 Ajax 调用的 set_flashdata() 问题,但由于某种原因,我的 sess_update() 函数永远不会被调用。我在我的扩展构造函数中放入了一个 log_message() 调用,它确实被调用了。
为什么当我执行 $this->session->sess_update() 时没有调用我的 sess_update() 函数?
会话库已添加到 autoload.php 配置文件中,我的扩展库位于 /application/libraries 中。
class MY_Session extends CI_Session
{
public function MY_Session()
{
log_message('debug', 'MY_Session construct');
parent::__construct();
}
/**
* Update an existing session
*
* @access public
* @return void
*/
function sess_update()
{
// skip the session update if this is an AJAX call!
if ( !IS_AJAX )
{
log_message('debug', 'NOT an AJAX request');
parent::sess_update();
} else {
log_message('debug', 'AJAX request');
}
}
}
我还将它添加到我的 constants.php 文件中
// Define Ajax Request
define('IS_AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');