我在delima中,当我点击退出按钮并重定向到登录页面时,我已经解除了会话和userdata。它工作得很完美,但是当我点击浏览器上的后退按钮并显示我已注销的页面时,我发现了这个问题,该页面不应该显示但是重定向主页不是吗?我真的遇到了麻烦。
public function logout(){
$this->session->unset_userdata('user_email');
$this->session->unset_userdata('user_type');
$this->session->sess_destroy();
redirect(site_url(),'refresh');
}
现在我还在该页面的控制器中设置了构造函数的重定向,我已经设置了注销按钮。
public function __construct() {
parent::__construct();
if(!$this->session->userdata('user_type')|| !$this->session->userdata('user_email')){
redirect(site_url(),"refresh");
}
$this->load->model('health_model');
}
感谢任何帮助。谢谢
答案 0 :(得分:0)
检查sess_destroy()
正在做什么。逻辑上它只是破坏(给定名称),因此不会删除您试图摆脱的用户数据,如下:
http://php.net/manual/en/function.session-destroy.php
session_destroy()会销毁与当前关联的所有数据 会话。它不会取消任何与之相关的全局变量 会话,或取消设置会话cookie。
为了完全杀死会话,喜欢将用户注销掉, 会话ID也必须取消设置。
还在这里: https://ellislab.com/codeigniter/user-guide/libraries/sessions.html
它声明:
unset_userdata()可用于从会话中删除数据 传递会话密钥。例如,如果要删除 您的会话信息中的'some_name':
$this->session->unset_userdata('some_name');
This function can also be passed an associative array of items to unset.
$array_items = array('username' => '', 'email' => '');
$this->session->unset_userdata($array_items);
确保您取消设置所需数据,即Codeigniter用于确定用户是否已登录的数据。
目前您只是取消设置user_email
和user_type
,请尝试使用user_id
之类的内容。