我将表单提交给 controller/complete
操作,set
$this->session->set_userdata('success', 3);
,然后用redirect('controller', 'refresh');
重定向到index
动作。
在我看来我得到
$success = $this->session->userdata('success');
做一些工作,然后
$this->session->set_userdata('success', 0);
它可以正常工作,但是当我重新加载页面(这是index
操作)时,我仍然可以使用$success
3
,而不是0
。我想念什么?
我已经看到了CodeIgniter DB会话的许多问题,因此拒绝使用它,以包括会话实际上未正确更新。
如果您有兴趣,我创建了一个基于PHP会话的类,该类是替代的,它受益于向后兼容性,但也可以轻松地使用它。
查看我的要塞:https://gist.github.com/chazmead/1688BECBCF11F897E962
要安装,您需要将CI会话confien替换为application/config/config/config.php中:
$config['session'] = (object)array(
'UID' => 'MY_SESSION_KEY',
'sess_expiration' => 7200,
'match_ip' => False,
'match_user_agent' => False
);
然后将文件安装到application/models/session.php
然后,只需加载此会话模型,而不是加载CI会话。使用此功能非常简单,只需将变量分配到会话中,并且可以自动保存,它还锁定并解锁了会话,以使异步请求不会被锁定(这是PHP会话的问题)
>为了完全向后兼容性,您可能需要在加载新型号后使用$this->session = &$this->Session
,否则您必须使用Session
(大写s)确保您的调用会话,因为这是CI模型的工作方式。或安装为库。
默认情况下,Codigniter在cookie中管理session
,更多信息
为什么我提交表格时不会立即更新cookie值?
CI还提供将会话数据存储在数据库表中的设置,如果您将会话存储在表中,则可以正常工作。
http://ellislab.com/codeigniter/user-guide/libraries/sessions.html