会话闪存数据正在更改 "magically",为什么?
Session Flash Data is changing "magically", why?
我有一个基于 CI 2.1.3 和 PHP 5.3.3 构建的项目。根据文档 here » 当我设置闪存数据会话变量时,闪存数据部分应该只对下一个请求可用,对吗?
我做了以下测试:
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
中,只是试图获取它们,但是它们在变化,为什么?
I would expect to have the same values when I call /auth/index2
, right?
没有。你实际上已经解释了原因:
when I set a flashdata session var it should be available only for the next request, right?
您在index()
中所做的那些var_dump()
不会显示您刚刚设置的$key
、$value
内容。它们显示您在 previous index()
调用中设置的值,但随后未调用 index2()
.
令人困惑,我知道。 CI2 就是这样......充满了错误和奇怪的东西,这就是为什么 它在几年前就停产了。尽快升级到最新的CI3.x
另外,CodeIgniter 有它自己的 CSRF 保护机制——您不需要实现它。而且 random_string()
并不是真正随机的...不要将其用于安全性。
我有一个基于 CI 2.1.3 和 PHP 5.3.3 构建的项目。根据文档 here » 当我设置闪存数据会话变量时,闪存数据部分应该只对下一个请求可用,对吗?
我做了以下测试:
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
中,只是试图获取它们,但是它们在变化,为什么?
I would expect to have the same values when I call
/auth/index2
, right?
没有。你实际上已经解释了原因:
when I set a flashdata session var it should be available only for the next request, right?
您在index()
中所做的那些var_dump()
不会显示您刚刚设置的$key
、$value
内容。它们显示您在 previous index()
调用中设置的值,但随后未调用 index2()
.
令人困惑,我知道。 CI2 就是这样......充满了错误和奇怪的东西,这就是为什么 它在几年前就停产了。尽快升级到最新的CI3.x
另外,CodeIgniter 有它自己的 CSRF 保护机制——您不需要实现它。而且 random_string()
并不是真正随机的...不要将其用于安全性。