我正在尝试避免每个用户登录我的应用程序时出现多个会话。假设当前行为是通过时间戳重新生成会话,所以每个用户将有多个会话,我想避免这种情况。
我当前的表格如下:
ci_sessions
用户
我本人是基于以下教程:Prevent Multiple Concurrent Logins in Codeigniter
这就是我的控制器中的内容:
$getUsername = $this->PublicSession_model->getUsername($username);
// SessionData
$sessionData = array(
'user_id' => $getUsername->id,
'username' => $getUsername->username,
'role' => $getUsername->role,
'theme_color' => $getUsername->theme_color,
);
// Set SessionData
$this->session->set_userdata($sessionData);
// Create new session
$id = $getUsername->id;
$sessionID = session_id();
// Update UseridData in CI_SESSION DB TABLE
$this->PublicSession_model->setSession($id, $sessionID, $sessionData);
这是我在模型中使用的两种方法:
public function getUsername($username) {
// select field we needed
$this->db->select('*');
$this->db->where('username', $username);
$this->db->where('token', ''?:NULL);
$this->db->where('status', 'active');
$this->db->limit(1);
$query = $this->db->get($this->users);
// check is $query have a data ?
if ($query->num_rows() > 0) {
// return data
return $query->row();
} else {
// redirect login, because no data with that username
redirect('accounts/login');
}
}
public function setSession($id, $sessionID, $sessionData){
// Get previous mapped session
$oldSessionId = $this->db->select('id')->where(array('id' => $id))->get($this->users)->row('session_id');
// Destroy old session mapped to previous user
$this->db->where('user_id', $oldSessionId);
$this->db->delete('ci_sessions', $sessionData);
// Map new session ID to the user
$this->db->where('id', $id);
$this->db->update($this->users, array('session_id' => $sessionID));
}
我想做的是根据成功登录后将要创建的新session_id更新users表中每列'session_id'的行。
我的功能不是获取上面的语句,而是更新具有相同会话的用户表中每个用户的session_id列。