php - 如何删除特定用户的 session 登录

标签 php mysql codeigniter session authentication

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

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(这意味着他们在线)。

但是,当用户注销时,似乎所有用户的 session 数据都被删除,而不仅仅是注销的用户。在 user_log 数据库中,仅记录第一个用户注销 ID。虽然记录了注销时间,但不记录下一个用户 ID。

例如:

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

这是我的注销功能:

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

最佳答案

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

关于php - 如何删除特定用户的 session 登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40711617/

相关文章:

php - 如何创建图像的显示顺序? (一道MySQL+PHP的问题)

php - Codeigniter登录系统问题日志记录

codeigniter - 如何在 CodeIgniter 2.1.3 中使用 ZendSearch?

php - 面向开发人员的 Facebook Graph API v3.1 访问 token 权限限制

php - 如何在两个不同的表中同时插入值

php - 在html中找到一个元素并将其分解为stock

php - CI SQL 插入错误

php - 如何在php中将ISO8601转换为日期格式

mysql - 根据现有列更新表列

Mysql更新和连接查询