我似乎无法在这方面取得任何进展。我的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类之间运行了一个差异,它们是相同的。
答案 0 :(得分:0)
以下是我解决问题的方法:标准规定浏览器不应允许在POST请求后重定向。 CI的redirect()
方法默认发送302重定向。逻辑方式是发送307重定向,这解决了我的问题,但有一个警告,显示有关重定向的确认对话框。其他选项是301(意味着永久移动)重定向,或者我选择的解决方案,javascript重定向。