首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AJAX调用一段时间后CodeIgniter丢失会话

AJAX调用一段时间后CodeIgniter丢失会话
EN

Stack Overflow用户
提问于 2012-07-12 20:35:06
回答 2查看 3.3K关注 0票数 2

我的投票情况很简单。

jQuery

代码语言:javascript
复制
function poll(){
    $.get(url,{},function(data){ poll(); });
}

PHP (为简洁起见删除的定时内容)

代码语言:javascript
复制
function responds_to_poll()
{
    if( ! $this->current_user()->is_logged_in())
    {
        redirect('auth/login');
    }

    echo json_encode("Whats up?");
}

我将观察Firebug 5-10分钟,它可以正常工作,但最终它会说是GET (302 Redirect),响应将包含auth/login.php文件中的html。

会话是由本机CI_Session类驱动的数据库。它们在2小时后到期,而不是5-10分钟。我试过其他问题中的一些东西,但到目前为止没有什么效果。我遗漏了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-12 21:14:17

这个黑客帮我解决了这个问题。当请求来自XHR请求时,它只会取消sess_update调用。

system/application/config/constants.php中定义这一点

代码语言:javascript
复制
define('IS_AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');

然后,使用以下内容创建system/application/libraries/My_Session.php

代码语言:javascript
复制
class MY_Session extends CI_Session {
    public function __construct($params = array())
    {
            parent::CI_Session($params);
    }

    public function sess_update()
    {
            if ( IS_AJAX )
            {
                    parent::sess_update();
            }
    }
}

基于这条线的黑客攻击。只在CI 1.7.2,YMMV上测试。

问题是我很快就被解雇了ajax请求。定期在其中一个上触发一个sess_update。有时,还会同时出现第二个ajax请求。该请求将提供最近过期的会话密钥,代码点火器将删除会话。

此修复只允许对非ajax请求进行会话更新。是kluge的,但能用。

票数 4
EN

Stack Overflow用户

发布于 2012-07-12 20:56:29

更改会话配置文件中的sess_expire_on_close。不太清楚为什么会有帮助..。可能是CI中的一个bug。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11460209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档