我有一个代码块,用于将一些值分配给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
时,它工作正常。为什么呢?
答案 0 :(得分:0)
OP :当我使用
userdata
而不是flashdata
时,它工作正常
flashdata()
的数据集仅保存用于 一次性 请求,然后清除:
Documentation: CodeIgniter支持“flashdata”或仅可用于下一个请求的会话数据,然后自动清除。
... keep_flashdata()
仅在第一次之后保存一个请求的数据:
Documentation: 如果您发现需要通过其他请求保留flashdata变量,则可以使用
keep_flashdata()
方法执行此操作。
但是,userdata()
始终可用,直到会话被销毁。
我认为你应该阅读完整的文档: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”,或者只支持会话数据 可用于下一个请求,然后自动清除。