【问题标题】:codeigniter unsetting session works unexpectedlycodeigniter unsetting session 意外工作
【发布时间】:2014-03-11 12:02:44
【问题描述】:

我提交表单到controller/complete action, 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。我错过了什么?

【问题讨论】:

    标签: php codeigniter session user-data


    【解决方案1】:

    我看到了许多关于 codeigniter DB Session 的问题,因此拒绝使用它,包括实际上没有正确更新的会话。

    如果您有兴趣,我创建了一个基于 PHP Session 的类作为替代,它受益于向后兼容性,而且使用它的方式也更简单。

    查看我的要点:https://gist.github.com/chazmead/1688becbcf11f897e962

    要安装,您需要将 application/config/config.php 中的 CI Session 配置替换为:

    $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 模型的工作方式。或作为库安装..

    【讨论】:

      【解决方案2】:

      codeigniter 默认在 COOKIE 中管理session,更多信息

      why the cookie value is not updated at once when i submit the form?

      CI 还提供了将会话数据存储在数据库表中的设置,如果您将会话存储在表中,这将正常工作。

      http://ellislab.com/codeigniter/user-guide/libraries/sessions.html

      【讨论】:

      • complete 操作中,我设置了 cookie ($this->session->set_userdata('success', 3);) 并将其发送给客户端。然后我重定向到index,所以客户端将那个cookie发回给我。我从 cookie ($this->session->userdata('success');) 中读取,更新它 ($this->session->set_userdata('success', 0);) 并将其发回。所以,在页面重新加载时,我会得到新的修改过的 cookie,其 success 值为 0。但是无论我重新加载多少次页面,我仍然得到3
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-04
      • 2017-08-17
      相关资源
      最近更新 更多