我在delima中,当我点击注销按钮时,它重定向到登录页面,我已经分发了会话和用户数据。它工作得很好,但当我点击浏览器上的后退按钮时,我发现了问题,它显示了我注销的页面,不应该显示,但重定向了主页,不是吗?我真的有麻烦了。
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');
}
感谢您的帮助。感谢
检查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
的设置。