CodeIgniter flashdata在单个请求后不会死亡

时间:2013-12-16 18:24:27

标签: php codeigniter

如CodeIgniter文档中所述,flashdata是仅在请求中存活的会话,之后它们就会死亡。

现在我已将此机制用于我的登录过程,但是,它失败了。每当我访问该页面时,某个flashdata仍然存在。

我在登录flashdata错误的情况下设置了email/pass,然后返回登录页面,然后设置条件,检查flashdata是否已设置,然后显示错误。现在,每次访问登录页面时都会显示登录失败错误。为什么呢?

以下是登录页面条件,它检查flashdata的可用性(在login.php视图文件中)

if($this->session->flashdata("login-result") == 0)
{
    show_fail("رمز عبور یا رایانامه اشتباه می باشد.");  
}

我还放了echo()代码来查看是否设置了flashdata,它显示了正确的值:

echo ($this->session->flashdata("login-result") );

这是我用来设置flashdata的登录条件:

// 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"); 
}

2 个答案:

答案 0 :(得分:0)

可能是你为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是否为的相同值并输入

有关详细信息,请参阅types comparison chart

答案 1 :(得分:0)

尝试使用$this->session->set_flashdata('your message')