CodeIgniter sess_destroy不会删除user_data会话?

时间:2013-11-28 07:13:24

标签: codeigniter

我正在为我的CodeIgniter应用创建测试用例。但是我发现了一些我认为不应该发生的事情:

在login.php控制器中:

public function logout()
{
    $this->session->sess_destroy();
    redirect('/');
}

所以我刚刚创建了一个测试来确保会话真的被破坏了:

public function test_logout()
{
     $this->CI = set_controller('login');
    // make sure that all session is destroyed
    $this->CI->session->set_userdata('test_session', 'some_value');
    $this->CI->logout();
    // userdata 'test_session' should be removed!
    $this->assertTrue(($this->CI->session->userdata('test_session')==null || $this->CI->session->userdata('test_session')==''));

}

但是我发现在运行测试用例时,我的测试用例失败了!在最后一行测试用例上调试后,我发现userdata仍然存在,其值为''some_value'。我认为sess_destroy也应删除所有设置的用户数据,按照他们在website documentation中描述的内容:

  

此函数应该是最后一个调用的函数,甚至闪存变量也将不再可用。如果您只想销毁某些项目而不是全部,请使用unset_userdata()。

我正在使用Kenji的CIUnit进行单元测试。 这是正确的行为还是我错过了什么?

1 个答案:

答案 0 :(得分:0)

刚刚发现CIUnit将Session路由到CIU_Session而不是原始CodeIgniter的CI_Session。它错过了CI_Session所做的一行:

$this->userdata = array();

结果证明这是CIUnit的问题,而不是CodeIgniter的问题。在他们的bitbucket页面中创建an issue