【问题标题】:Session Flash Data is changing "magically", why?会话闪存数据正在“神奇地”变化,为什么?
【发布时间】:2018-01-19 19:04:53
【问题描述】:

我有一个基于 CI 2.1.3 和 PHP 5.3.3 构建的项目。根据文档here » Flash Data 部分,当我设置 flashdata 会话 var 时,它应该仅可用于下一个请求,对吧?

我做了以下测试:

class auth1 extends CI_Controller
{
    public function index()
    {
        $this->load->helper('string');
        $key   = random_string('alnum', 8);
        $value = random_string('alnum', 20);
        $this->session->set_flashdata('csrfkey', $key);
        $this->session->set_flashdata('csrfvalue', $value);

        echo '<pre>';

        var_dump($this->session->flashdata('csrfkey'));
        var_dump($this->session->flashdata('csrfvalue'));
    }

    public function index2()
    {
        echo '<pre>';
        var_dump($this->session->flashdata('csrfkey'));
        var_dump($this->session->flashdata('csrfvalue'));
    }
}

当我调用/auth/index2 时,我希望得到相同的值,对吧?令人惊讶的是,这些正在发生变化,见下文:

// /auth/index
string(8) "meo6dhEr"
string(20) "JNNN07XMXfmADzYw6cKc"

// /auth/index2
string(8) "I2vmFRuO"
string(20) "CbDhiD8CkY3plOK7Hg7B"

有什么想法吗?我没有将它们设置在index2 中,只是想获取它们,但是它们正在改变,为什么?

【问题讨论】:

  • 我不确定您遇到了什么。我已经下载了 same 代码并在我的本地主机上进行了尝试。 index2 的值改变的唯一时间是当我访问 index 时,而不是当我直接访问 index2 时——这是有道理的,因为 index 正在设置值;并且因为它也在那里渲染,所以当你重新加载索引时它会刷新它。
  • 你确定这是唯一使用这些代码的代码吗?您应该具有相同的值或它不存在。当您转到 index2 时,是否会调用 index(),因为它只是覆盖了以前的值。
  • ^ 正是我认为正在发生的事情

标签: php codeigniter session-variables codeigniter-2


【解决方案1】:

当我调用/auth/index2 时,我希望得到相同的值,对吧?

不。而且您实际上已经解释了原因:

当我设置 flashdata session var 时,它应该仅可用于下一个请求,对吗?

您在index() 中所做的那些var_dump()s 不会显示您刚刚设置的$key$value 内容。它们显示了您在上一个index() 调用中设置的值,之后没有调用index2()

令人困惑,我知道。 CI2 就是这样……充满了错误和奇怪的东西,这就是为什么它在几年前就停产了。尽快升级到最新的 CI 3.x。

另外,CodeIgniter 有它自己的 CSRF 保护机制——你不需要实现它。而random_string() 并不是真正随机的......不要将其用于安全性。

【讨论】:

  • 我希望我可以升级到 CI 3.x,但这是不可能的,这是目前产品中真正的旧遗留系统,我们必须解决任何问题。无论如何,我们正在转向 C#,所以没有更多的 CI
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-15
  • 1970-01-01
  • 2015-07-22
  • 1970-01-01
  • 1970-01-01
  • 2012-01-10
  • 1970-01-01
相关资源
最近更新 更多