我有一个代码块,用于在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",即会话数据可用于下一个请求,然后自动清除。