我正在为每个用户创建一个登录 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/