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

时间:2016-04-09 13:53:06

标签: php codeigniter codeigniter-2

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

export_data控制器:

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时,它工作正常。为什么呢?

2 个答案:

答案 0 :(得分:0)

  

OP :当我使用userdata而不是flashdata时,它工作正常

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

  

Documentation: CodeIgniter支持“flashdata”或仅可用于下一个请求的会话数据,然后自动清除。

... keep_flashdata()仅在第一次之后保存一个请求的数据:

  

Documentation: 如果您发现需要通过其他请求保留flashdata变量,则可以使用keep_flashdata()方法执行此操作。

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

请参阅:What is Session Data?

我认为你应该阅读完整的文档:Session Library

答案 1 :(得分:0)

首先你应该知道什么是flashdata

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

例如,假设您在控制器中有两个功能

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,则会为test设置ext_data

之后如果你拨打your_site_url/controller/test2,它会打印test字3次意味着你可以在这个时间内使用这个会话变量,但是对于下一次呼叫(再次点击your_site_url/controller/test2 )它将是空白的。

希望你明白这意味着什么。

  

CodeIgniter支持“flashdata”,或者只支持会话数据   可用于下一个请求,然后自动清除。