我的投票情况很简单。
jQuery
function poll(){
$.get(url,{},function(data){ poll(); });
}PHP (为简洁起见删除的定时内容)
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分钟。我试过其他问题中的一些东西,但到目前为止没有什么效果。我遗漏了什么?
发布于 2012-07-12 21:14:17
这个黑客帮我解决了这个问题。当请求来自XHR请求时,它只会取消sess_update调用。
在system/application/config/constants.php中定义这一点
define('IS_AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');然后,使用以下内容创建system/application/libraries/My_Session.php:
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的,但能用。
发布于 2012-07-12 20:56:29
更改会话配置文件中的sess_expire_on_close。不太清楚为什么会有帮助..。可能是CI中的一个bug。
https://stackoverflow.com/questions/11460209
复制相似问题