1

我是 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)。

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

谢谢。

4

3 回答 3

5

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

于 2013-04-05T08:46:49.047 回答
4

只要确保,有两个选择。

1.换成system\libraries\Session.php这个

2.扩展你原来的 session.php 像@undefined 答案。

如果你做 1 则不要做2,反之亦然。

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

于 2013-04-05T10:20:00.380 回答
1

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

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);
        }
    }
}
于 2013-04-05T08:54:41.663 回答