为什么CodeIgniter中的flashdata并不总是有效,而userdata总是有效


Why flashdata in CodeIgniter does not always work whereas userdata always works?

我有一个代码块,用于在report控制器中为flashdata分配一些值,另一个块用于访问export_data控制器中的flashdata

Report控制器:

if ($this->input->get_post('date_frm')) {
              $conditions[] = 'appointment_date >= "'.trim($this->input->get_post('date_frm', TRUE)).'"';
            }
            if ($this->input->get_post('date_to')) {
              $conditions[] = 'appointment_date <= "'.trim($this->input->get_post('date_to', TRUE)).'"';
            }
            $conditions = $this->search_model->searchterm_handler($conditions);
            $this->session->set_flashdata('ext_data', $conditions);

Export_data控制器中:

$myVar = $this->session->flashdata('ext_data');
    $this->session->keep_flashdata('ext_data');

它并不总是有效的,但当我使用userdata而不是flashdata时,它工作得很好。为什么?

OP:当我使用userdata而不是flashdata时,工作良好

带有flashdata()的数据集仅为一次性请求保存,然后清除:

文档:CodeIgniter支持"flashdata",即仅可用于下一个请求的会话数据,然后自动清除

并且keep_flashdata()仅为在第一个请求之后的一个附加请求保存数据:

文档:如果您发现需要通过额外的请求保留flashdata变量,可以使用keep_flashdata()方法


但是,userdata()始终可用,直到会话被破坏。

请参阅:什么是会话数据


我认为您应该阅读完整的文档:会话库

首先你应该知道什么是flash数据。

调用会话值时,它不会清除该值。即使它可以用于下一次服务器调用,也不会用于第二次调用。

举个例子,假设你在一个控制器中有两个功能

function test1()
{
    $this->session->set_flashdata('ext_data', 'test');
}
function test2()
{
    echo $this->session->userdata('ext_data');
    echo $this->session->userdata('ext_data');
    echo $this->session->userdata('ext_data');
}

现在,如果您调用your_site_url/controller/test1,它将为ext_data 设置test

之后,如果您调用your_site_url/controller/test2,它将打印test单词3次,这意味着您可以在这段时间随心所欲地使用此会话变量,但对于下一次调用(再次单击your_site_url/controller/test2),它将为空。

希望你明白这是什么意思。

CodeIgniter支持"flashdata",即会话数据可用于下一个请求,然后自动清除。