2

我的 CodeIgniter Session() 类有问题,而当用户注销时出现错误。问题是我在显示他的头像和信息的页面的标题上有一个用户 HTML 块。问题是当我在注销控制器中执行此操作时:

if ($this->session->userdata('is_logged_in') == 1) {
    $data['logged_in'] = TRUE;

    $this->session->sess_destroy();
}

$this->output->set_header("Cache-Control: no-store, no-cache, must-revalidate");
$this->output->set_header("Cache-Control: post-check=0, pre-check=0");
$this->output->set_header("Pragma: no-cache");

..然后在我的 HTML 视图中我问这个:

<?php
    if ($this->session->userdata('is_logged_in') == 1) {
        // Output HTML
    }
?>

..但它会为其丢失的所有会话变量生成错误。

所以我的问题;为什么检查时'is_logged_in'仍然存在,但其余数据消失了。

4

1 回答 1

2

这是 CI 2.1.0 中的一个错误,如果您调用$this->session->sess_destroy(),它不会取消设置用户数据。

可以在此处找到修复问题的拉取请求:https ://github.com/EllisLab/CodeIgniter/pull/1323 。

修复非常简单。您必须更改文件system\libraries\Session.php。您必须在函数末尾添加以下行sess_destroy()

// Kill session data
$this->userdata = array();

所以sess_destroy()看起来像这样:

/**
 * Destroy the current session
 *
 * @return  void
 */
public function sess_destroy()
{
    // Kill the session DB row
    if ($this->sess_use_database === TRUE && isset($this->userdata['session_id']))
    {
        $this->CI->db->where('session_id', $this->userdata['session_id']);
        $this->CI->db->delete($this->sess_table_name);
    }

    // Kill the cookie
    setcookie(
            $this->sess_cookie_name,
            addslashes(serialize(array())),
            ($this->now - 31500000),
            $this->cookie_path,
            $this->cookie_domain,
            0
        );

    // Kill session data
    $this->userdata = array();
}
于 2012-07-15T19:15:59.987 回答