为什么使用编码器会话自动过期?如果在网页上使用ajax调用


Why session expires automatically with codeigniter ? if use ajax calling on webpage

我是php编码器会话的新来者。我有一个关于会话到期在我的网站的问题。我使用ajax coll在我们的网站页面上加载广告div,还添加到购物车功能,以在同一页面上添加多个产品。但我的购物车添加的产品是空的,由于会话过期后批准。4 - 5分钟。关于这个问题我做了很多研究。我认为我的网站会话过期,由于collcolling 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)。

请给我一个解决这个问题的方法

谢谢。

去年CI中有一个session.php补丁解决了ajax+session过期问题,请查看下面的补丁链接这里

确保有两个选择。

1。将system'libraries'Session.php替换为这个

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

如果没有。1 then don do no。2,反之亦然

我只知道这些。祝你好运!

这是一个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);
        }
    }
}