CI 2.0.3会话heisenbug:会话在20分钟后丢失,仅在服务器重定向,日志中没有任何可疑之处

时间:2012-01-25 17:34:16

标签: session-cookies codeigniter-2

我似乎无法在这方面取得任何进展。我的CI会话设置如下:

$config['sess_cookie_name']     = 'ci_session';
$config['sess_expiration']      = 0;
$config['sess_expire_on_close'] = FALSE;
$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'] = FALSE;
$config['sess_time_to_update']  = 7200;
$config['cookie_prefix']    = "";
$config['cookie_domain']    = "";
$config['cookie_path']      = "/";
$config['cookie_secure']    = FALSE;

会话库在自动加载上加载。我已经评论了sess_update函数,以防止我发现有关阅读CI论坛的AJAX错误。

数据库中的ci_sessions表具有排序规则utf8_general_ci(在每次redirect()调用之后,有一个错误会丢失会话,并且它与排序规则为{{{ 1}}默认情况下)。

在我的管理部分的用户尝试添加长篇文章并单击“保存”按钮后,它总是会中断。保存操作如下所示:

latin1_swedish_ci

如果您花费超过20分钟并点击保存,则会添加该文章,但在重定向时,该用户将被注销。

我也启用了日志记录,有时当错误发生时,我收到消息function save($id = 0){ if($this->my_model->save_article($id)){ $this->session->set_flashdata('message', 'success!'); redirect('admin/article_listing'); }else{ $this->session->set_flashdata('message', 'errors encountered'); redirect('admin/article_add'); } } ,但只有一半的时间。另一半我什么都没得到:显示我放在Session构造函数末尾的消息,没有其他内容。在所有情况下,如果我查看存储在浏览器中的cookie,在错误之后cookie的第一部分与哈希不匹配。

此外,虽然我知道Codeigniter不使用本机会话,但我已将The session cookie data did not match what was expected. This could be a possible hacking attempt.设置为86400。

另外需要提及的是,我无法在计算机上重现错误,但在我测试过的所有其他计算机上,此错误的显示方式与上述相同。

如果您对下一步该做什么有任何想法,我将非常感谢他们。更改为新版本或使用本机会话类(旧版本用于CI 1.7,它仍然有用吗?)也是我愿意考虑的选项。

编辑:我在CI 2.0.3中的Session类和最新的CI Session类之间运行了一个差异,它们是相同的。

1 个答案:

答案 0 :(得分:0)

以下是我解决问题的方法:标准规定浏览器不应允许在POST请求后重定向。 CI的redirect()方法默认发送302重定向。逻辑方式是发送307重定向,这解决了我的问题,但有一个警告,显示有关重定向的确认对话框。其他选项是301(意味着永久移动)重定向,或者我选择的解决方案,javascript重定向。