【问题标题】:CodeIgniter sess_destroy does not delete user_data session?CodeIgniter sess_destroy 不会删除 user_data 会话?
【发布时间】:2013-11-28 07:13:23
【问题描述】:

我正在为我的 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 仍然存在 value = 'some_value'。我认为 sess_destroy 也应该按照他们在website documentation 中描述的内容删除所有设置的用户数据:

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

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

【问题讨论】:

  • 你也可以使用'unset_userdata()'函数!
  • 是的,但是如果开发者不断添加新的会话名称,调用就会很多,或者不得不调用 all_userdata() 什么的。
  • 我很难理解你的工作流程,你是如何测试它的......在调用“注销”之后,你应该被重定向。请记住,cookie 中的会话是数据库中的会话,可能存在于不同的时间。
  • 从注销功能重定向后,应该无法调用 assertTrue 行
  • 在 CIUnit 测试用例中可以。

标签: codeigniter


【解决方案1】:

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

$this->userdata = array();

原来这是 CIUnit 的问题,而不是 CodeIgniter 的问题。在他们的 bitbucket 页面中创建 an issue

【讨论】:

    猜你喜欢
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    • 1970-01-01
    • 2013-08-11
    • 2012-03-04
    • 1970-01-01
    • 2012-05-23
    相关资源
    最近更新 更多