CodeIgniter Session()类有问题,而用户注销时出错。问题是我在页面的标题上有一个用户HTML块,其中显示了他的头像和信息。问题是当我在我的Logout Controller中执行此操作时:
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'在检查时仍然存在,但其余的数据都消失了。
答案 0 :(得分: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();
}