正如CodeIgniter文档中所描述的,flashdata
是仅在请求中活动的会话,之后它们将消亡。
现在我已经在登录过程中使用了这种机制,但是,它失败了。每当我访问该页面时,特定的flashdata
都是活动的。
在登录email/pass
错误的情况下,我设置了一个flashdata
,然后返回登录页面,我设置一个条件,检查是否设置了flashdata,然后显示错误。现在,每次我访问登录页面时,都会显示登录失败错误。为什么?
这是登录页面的条件,它检查flashdata的可用性(在login.php视图文件中)
if($this->session->flashdata("login-result") == 0)
{
show_fail("رمز عبور یا رایانامه اشتباه می باشد.");
}
我还放了echo()
代码,看看是否设置了flashdata,它显示了正确的值:
echo ($this->session->flashdata("login-result") );
这是我用来设置flash数据的登录条件:
// go with regular registration
$this->db->where("email", $this->input->post("email"));
$this->db->where("password", md5($this->input->post("password")));
$this->db->from("users");
$login_result = $this->db->count_all_results();
if($login_result == 0)
{
$this->session->set_flashdata("login-result", 0);
redirect(base_url("access/login"));
}
else if($login_result > 0)
{
redirect("panel/home");
}
可能是您为FLASHDATA分配了0
的值,这是一个可以接受的数字,但在PHP中,0也意味着FALSE,这是未设置的FLASHDATA的常规返回值。
所以试着给它一个真实的价值:
$this->session->set_flashdata("login-result", 1);
你会看到
if(!$this->session->flashdata("login-result"))
{
show_fail("رمز عبور یا رایانامه اشتباه می باشد.");
}
将起作用。
如果要保留0
,请使用严格相等检查:
if($this->session->flashdata("login-result") === 0)
这样它将检查flashdata是否为相同的值和类型。
有关更多详细信息,请参阅类型比较表
尝试使用$this->session->set_flashdata('your message')