【问题标题】:$this->session->unset_userdata not working?$this->session->unset_userdata 不工作?
【发布时间】:2015-05-29 14:20:22
【问题描述】:

所以我有这个登录方式:

public function login(){
    $this->form_validation->set_rules('username','Username','trim|required|min_length[4]|xss_clean');
    $this->form_validation->set_rules('password','Username','trim|required|min_length[4]|xss_clean');

    if($this->form_validation->run()== FALSE) {

        //Loading View
        $this->load->view('admin/layouts/login');


        $username = $this->input->post('username');
        $password = $this->input->post('password');

        //Validate Username & Password
        $user_id = $this->Authenticate_model->login($username, $password);

        if($user_id){
            $user_data = array(
                'user_id' => $user_id,
                'username' => $username,
                'logged_in' => true
            );

            //Set session userdata
            $this->session->set_userdata($user_data);
        } else {
            //Set message
            $this->session->set_flashdata('pass_login', 'You are now logged in');
            redirect('admin/dashboard');
        }
    }
}

然后我用这个简单的方法注销:

public function logout(){
    //Unset User Data
    $this->session->unset_userdata('user_id');
    $this->session->unset_userdata('username');
    $this->session->unset_userdata('logged_in');
    $this->session->sess_destroy();

    redirect('admin/authenticate/login');
}

所以基本上我正在取消设置我的所有会话userdata,然后重定向回登录控制器。发生的情况是,当我重定向回登录页面时,我会自动再次登录,就像我的会话数据仍然有效并且存在一样。为什么会这样?

【问题讨论】:

  • 你同时使用了 unset 和 $this->session->sess_destroy();试一试?
  • 是的,我删除了sess_destroy() 并且它有效,但理论上它也应该可以使用它。奇怪。
  • 其实我错了。它不工作......
  • 你使用的是什么版本的codeigniter。
  • $this->form_validation->run()== FALSE 应该是$this->form_validation->run()!== FALSE

标签: codeigniter session


【解决方案1】:

你可以试试

unset($this->session->userdata('user_id'));
unset($this->session->userdata('logged_in'));
unset($this->session->userdata('username'));

或者只是有

$this->session->sess_destroy();

确保您的会话库自动加载并根据 codeigniter 的版本配置了您的设置

【讨论】:

  • 因为$this->session->userdata('user_id')返回一个值,所以不能在返回值上调用unset
【解决方案2】:

也许你在 __construct 处放置“如果 session == true 则重定向”代码,这是我的问题:v

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-24
    • 2012-10-18
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    • 2016-07-15
    相关资源
    最近更新 更多