如何删除特定用户的会话登录

时间:2016-11-21 01:40:35

标签: php mysql codeigniter session login

我正在为每个用户创建一个登录会话。这是我的会话功能:

public function check_login()
{
    $uname  = $this->input->post('username');
    $passwd = $this->input->post('password');

    $this->form_validation->set_rules('username','user_name','required');
    $this->form_validation->set_rules('password','password','required');

    if( $this->form_validation->run() == false )
    {
        $this->load->view('login');
    }
    else
    {
        $this->load->model('model_login');
        $result = $this->model_login->query_login();

        if(!$result)
        { $this->load->view('login'); }
        else
        {
            //Log History
            $id_user                = $this->session->userdata('id_user');
            $data_log['id_user']    = $this->session->userdata('id_user');
            $data_log['log_time']   = date("Y-m-d H:i:s");
            $data_log['status']     = 1;

            $this->model_login->insert_log($data_log);

            $data = array( 'log_status' => 1 );
            $this->model_login->update_log($data,$id_user);

            echo "<script>alert('Login Sukses')</script>";
            redirect(base_url() . 'con_vendor/index');
        }
    }
}

当用户登录或注销时,他们的历史记录被记录到数据库中(参见日志历史记录评论)并且他们的登录状态变为1(这意味着他们在线)。

但是,当用户注销时,似乎删除了所有用户的会话数据,而不仅仅是注销用户。在user_log db中,仅记录第一个用户注销ID。记录退出时间后,不会记录下一个用户ID。

例如:

用户A登录,然后用户B登录。所有登录数据都记录在user_log表中。然后用户B注销然后用户A注销。仅记录用户B的sesssion数据,用户A sesion数据丢失。

这是我的退出功能:

public function logout()
{
    $id_user                = $this->session->userdata('id_user');
    $data_log['id_user']    = $this->session->userdata('id_user');
    $data_log['log_time']   = date("Y-m-d H:i:s");
    $data_log['status']     = 2;

    $this->model_login->insert_log($data_log);

    $data = array( 'log_status' => 0 );
    $this->model_login->update_log($data,$id_user);

    $arr_sess = array(  'id_user' => $this->session->userdata('id_user'),
                        'username' => $this->session->userdata('username'),
                        'level' => $this->session->userdata('level'),
                        'nip' => $this->session->userdata('nip'),
                        'bagian' => $this->session->userdata('bagian')
                     );

    $this->session->unset_userdata($arr_sess);      

    redirect('con_login/index');
}

用户A和B登录/注销后的user_log表

No     user_id    log_time   status
1      USER_B       10:25         1     //1 is login and 2 is logout
2      USER_A       11:03         1
3      USER_B       11:45         2
4      (no data)    11:55         2

1 个答案:

答案 0 :(得分:0)

您需要将会话保存到数据库并检查客户端会话(header.php的代码),如果数据库中的会话仍然可用,则用户可以打开,但如果会话已被删除,则会将用户重定向到注销页面。 注意:您可以从管理面板中删除会话。 (只是一个简单的mysql代码)