我正在为每个用户创建一个登录会话。这是我的会话功能:
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
答案 0 :(得分:0)
您需要将会话保存到数据库并检查客户端会话(header.php的代码),如果数据库中的会话仍然可用,则用户可以打开,但如果会话已被删除,则会将用户重定向到注销页面。 注意:您可以从管理面板中删除会话。 (只是一个简单的mysql代码)