Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么使用codeigniter会话会自动过期?如果在网页上使用ajax调用_Php_Jquery_Ajax_Codeigniter_Session - Fatal编程技术网

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

Php 为什么使用codeigniter会话会自动过期?如果在网页上使用ajax调用,php,jquery,ajax,codeigniter,session,Php,Jquery,Ajax,Codeigniter,Session,我是php codeigniter会话的新手。我的站点上有一个关于会话过期的问题。 我正在使用AJAXColl在我们的网站页面上为老顶广告div添加内容,并添加到购物车功能,以便在同一页面上添加多个产品。但我的购物车添加的产品是空的,因为会话在批准后过期。4-5分钟。 我对这个问题做了很多研究。我想我的站点会话已经过期了,因为我需要冷却ajax并同时更新会话id。但我不确定这一点 我已将config.php文件配置为- $config['sess_cookie_name'] = 'ci_sess

我是php codeigniter会话的新手。我的站点上有一个关于会话过期的问题。 我正在使用AJAXColl在我们的网站页面上为老顶广告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_会话)

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


谢谢。

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

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

这是一个CI bug,当发送Ajax请求时,会话将被销毁。只有当请求不是Ajax时,才可以扩展CI_会话类并调用
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);
        }
    }
}

这是一个CI错误,当发送Ajax请求时会话会被破坏,您可以扩展CI_会话类,仅当请求不是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);
        }
    }
}

只要确定,有两个选择

1.将
system\libraries\Session.php
替换为

2.像@undefined answer一样扩展原始session.php

如果你做第一,那么不要做第二,反之亦然


我只知道这些。祝你好运

只要确定,有两种选择

1.将
system\libraries\Session.php
替换为

2.像@undefined answer一样扩展原始session.php

如果你做第一,那么不要做第二,反之亦然



我只知道这些。祝你好运

codeigniter什么版本?@Charlie,我使用的是codeigniter 1.7.2。请给出这个问题的简单解决方案,因为我是codeigniter的新手。既然你是CI的新手,为什么不使用更新的版本呢?你有两个答案,仍然没有正确的解决方案??codeigniter什么版本?@Charlie,我使用的是codeigniter 1.7.2。请,给出这个问题的简单解决方案,因为我是CodeIgniter的新手。既然你是CI的新手,为什么不使用更新的版本呢?你得到了两个答案,仍然没有正确的解决方案??你愿意帮忙吗;见上面的评论。谢谢。@Charlie,我已经更新了答案。你愿意帮忙吗;见上面的评论。谢谢。@Charlie,我已经更新了答案。谢谢你,先生。我完全满意这是否有效?您的第一个选择是在system\libraries\input.php文件中添加is\u ajax\u request()。谢谢你的回复。谢谢你,先生。我完全满意这是否有效?您的第一个选择是在system\libraries\input.php文件中添加is\u ajax\u request()。谢谢你的回复。