Php 为什么CodeIgniter中的flashdata不总是工作,而userdata总是工作?

Php 为什么CodeIgniter中的flashdata不总是工作,而userdata总是工作?,php,codeigniter,codeigniter-2,Php,Codeigniter,Codeigniter 2,我有一个代码块,用于为报告控制器中的flashdata分配一些值,另一个代码块用于访问导出数据控制器中的flashdata 报告控制器: if ($this->input->get_post('date_frm')) { $conditions[] = 'appointment_date >= "'.trim($this->input->get_post('date_frm', TRUE)).'"'; }

我有一个代码块,用于为
报告
控制器中的
flashdata
分配一些值,另一个代码块用于访问
导出数据
控制器中的
flashdata

报告
控制器:

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);
$myVar = $this->session->flashdata('ext_data');
    $this->session->keep_flashdata('ext_data');
它并不总是有效的,但是当我使用
userdata
而不是
flashdata
时,它工作得很好。为什么?

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

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

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

…和
keep_flashdata()
仅为第一次请求后的另一次请求保存数据:

如果您发现需要通过其他请求保留flashdata变量,可以使用
keep\u flashdata()
方法


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

见:



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

首先您应该知道什么是

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

例如,假设控制器中有两个函数

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');
}
现在,如果您调用
您的站点url/controller/test1
,它将为
外部数据设置
test

之后,如果您调用
您的站点\u url/controller/test2
,它将打印
test
单词3次,这意味着您可以在这一次使用此会话变量,但对于下一次调用(再次点击
您的站点\u url/controller/test2
),它将为空

希望你明白这是什么意思

CodeIgniter支持“flashdata”,或仅在 可用于下一个请求,然后自动清除


“不总是工作”和“工作很好”到底是什么意思?@Sparky:“不总是工作”也就是说,当我在我的机器上执行这个程序时,flashdata正在工作,当部署到服务器上时,它停止工作,当我将代码合并到另一台在同一项目上工作的开发人员机器上时,它也停止工作。你不认为这足够重要,可以在你的OP中解释吗?我认为在test2()中您遗漏了flashdata,但您编写了userdata,这很混乱