与导致会话注销codeigniter的ajax请求相关的问题

时间:2015-06-11 08:12:47

标签: php ajax codeigniter session codeigniter-2

在我目前的应用程序中,我向后端发出了很多ajax请求。

使用的Codeigniter版本是2.1.4。

所以在会话退出之后,我认为由于会话更改和ajax请求仍然使用过去的令牌发出请求。

使用codeigniiter版本2.2.1,我看到修复了"修复了会话库中的一个错误,其中在AJAX请求期间发生会话ID重新生成。"。 由于我有一个2小时的过期时间,并且我有一个没有页面重新加载的单页js页面应用程序,使用2.2.1版本,我是否需要每隔2小时发出一个ajax请求来更改背景中的令牌,而没有其他的ajax请求发生。

感谢。

2 个答案:

答案 0 :(得分:0)

在config.php中检查并更新以下会话设置行。

/*
|--------------------------------------------------------------------------
| Session Variables
|--------------------------------------------------------------------------
|
| 'sess_cookie_name'        = the name you want for the cookie
| 'sess_expiration'         = the number of SECONDS you want the session to last.
|   by default sessions last 7200 seconds (two hours).  Set to zero for no expiration.
| 'sess_expire_on_close'    = Whether to cause the session to expire automatically
|   when the browser window is closed
| 'sess_encrypt_cookie'     = Whether to encrypt the cookie
| 'sess_use_database'       = Whether to save the session data to a database
| 'sess_table_name'         = The name of the session database table
| 'sess_match_ip'           = Whether to match the user's IP address when reading the session data
| 'sess_match_useragent'    = Whether to match the User Agent when reading the session data
| 'sess_time_to_update'     = how many seconds between CI refreshing Session Information
|
*/
$config['sess_cookie_name']     = 'ci_session';
$config['sess_expiration']      = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = FALSE;
$config['sess_use_database']    = FALSE;
$config['sess_table_name']      = 'ci_sessions';
$config['sess_match_ip']        = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update']  = 300;

答案 1 :(得分:0)

这是我面临同样问题的常见问题。 为此,您必须创建扩展session的自定义会话类,然后自动加载自定义会话。

class MY_Session extends CI_Session {

public function sess_update()
{
    $CI =& get_instance();

    if ( ! $CI->input->is_ajax_request())
    {
        parent::sess_update();
    }
  }
}

有关详情,请查看this