CodeIgniter Unsotting会话意外工作



我将表单提交给 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

最新更新