注销在CI 3中不起作用

时间:2017-01-19 10:01:47

标签: php codeigniter codeigniter-3

我正在尝试注销登录用户。 但它没有工作,在注销后,我也得到了会话数据。

下面是我的代码。请看看。

public function logout() {

        if ($this->session->userdata('login') == "true") {
            $current_user_data = $this->session->userdata('current_user_data');

            $type = $current_user_data['type'];
            $user_id = $current_user_data['user_id'];
            $token = $current_user_data['token'];
            $logout = $this->school->logout($type, $user_id, $token);
            if (!empty($logout)) {
                //echo $logout->responseCode;
                if ($logout->responseCode == 200 || $logout->responseCode == 419) {
                    $this->session->sess_destroy();
                    $this->clear_cache();//clear the cache after logout //
                    redirect('login');
                } else {
                    //$error['code']=json_encode(array('responseCode' => '500', 'response' => array('message' => 'error', 'statusReason' => 'internal_server_error')));
                    $url = "error/error_type/500";
                    redirect($url);
                }
            } else {
                //echo "invalid token";
                $url = "error/error_type/401";
                redirect($url);
            }
        } else {
            redirect('login');
        }
    }

它也会遇到条件,但会话并没有破坏。

这里有什么问题吗?

谢谢

2 个答案:

答案 0 :(得分:0)

sess_destroy()会破坏所有会话,甚至是闪存会话。为什么不使用简单的功能。我试过这个,它在我的情况下起作用。我创建了一个名为userdata的会话,它将在登录时获取用户凭据。这是我的退出功能。

/**
 * to logout the current session
 */

public function logout() {
    $this->session->unset_userdata('user_login');
    $this->load->view('index.php');
}

如果你想破坏会话数据,这应该也可以正常工作, 再进一步参考https://www.codeigniter.com/user_guide/libraries/sessions.html

答案 1 :(得分:0)

尝试使用此方法注销

<?php
    class Logout extends CI_Controller
    {
        public function __construct()
        {
            parent::__construct();
            $this->load->helper(array('url','html'));
            $this->load->library('session');
            $this->load->database();
            $this->load->model('users_model');

        }   

        function index()
        {
        $user_data = $this->user_model->get_user_by_id($this->session->userdata('id'));
            foreach ($user_data as $key => $value) {
                if ($key != 'session_id' && $key != 'ip_address' && $key != 'user_agent' && $key != 'last_activity') {
                    $this->session->unset_userdata($key);
                }
            }
        $this->session->sess_destroy();

        redirect('Welcome', 'refresh');
        }
    }