CodeIgniter闪存数据不会在单个请求后失效


CodeIgniter flashdata does not die after a single request

正如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')