销毁了会话和用户数据,但仍然显示注销后的内容



我在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_emailuser_type,所以请尝试类似user_id的设置。

最新更新