为什么会话会自动与codeigniter一起过期?如果在网页上使用ajax调用

时间:2013-04-05 08:38:15

标签: php jquery ajax codeigniter session

我是php codeigniter会话的新手。我有关于我的网站上的会话过期的问题。          我在我们的网站页面上使用ajax coll来广告div,并添加到购物车功能以在同一页面上添加多个产品。但由于会议在审批后过期,我的购物车添加的产品是空的。 4-5分钟。 关于这个问题,我做了很多研究。我认为我的网站会话已经过期,因为同时更新了ajax并更新了会话ID。但我不确定。

我已将config.php文件配置为 -

$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration']  = 0;
$config['sess_encrypt_cookie']= FALSE;
$config['sess_use_database']= TRUE;
$config['sess_table_name']  = 'ci_sessions';
$config['sess_match_ip']    = FALSE;
$config['sess_match_useragent']= TRUE;
$config['sess_time_to_update'] = 300;

我还创建了表(ci_sessions)。

请给我一个解决方案来解决此问题。

感谢。

3 个答案:

答案 0 :(得分:5)

去年CI中有一个session.php补丁解决了ajax +会话过期问题,请看下面的补丁LINK HERE

答案 1 :(得分:3)

请确保,有两种选择。

1.用this one

替换system\libraries\Session.php

2.扩展您的原始session.php,如@undefined answer。

如果你没有1,那么做2号,反之亦然。

我不知道更多。祝你好运!。

答案 2 :(得分:1)

这是一个CI错误,会在发送Ajax请求时销毁会话,您可以扩展CI_Session类并仅在请求不是Ajax时调用sess_update

class MY_Session extends CI_Session
{
    function sess_update()
    {
        // Listen to HTTP_X_REQUESTED_WITH
        if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] !== 'XMLHttpRequest') {
            parent::sess_update();
        }
    }
}

要加载MY_Session类,您可以将此功能添加到config文件中:

function __autoload($classname) {
    if (strpos($classname, 'CI_') !== 0) {
        $file = APPPATH . 'libraries/' . $classname . '.php';
        if (file_exists($file) && is_file($file)) {
            @include_once($file);
        }
    }
}