Я пытаюсь избежать нескольких сеансов для пользователей, когда они входят в мое приложение.Допустим, текущее поведение восстанавливает сеансы по метке времени, поэтому для каждого пользователя будет более одного сеанса, я хочу этого избежать.
Мои текущие таблицы выглядят так:
ci_sessions
- id
- user_id
- username
- роль
- theme_color
- ip_address
- отметка времени
- данные
пользователи
- id
- session_id
- имя пользователя
- роль
- theme_color
Я основал себя на следующем уроке: Предотвращение множественных одновременных входов в систему в 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 в таблице пользователей в соответствии с новым session_id, который будет создан при успешном входе в систему.
Вместо того, чтобы получать приведенное выше утверждение, моя функция обновляет мой столбец session_id у каждого пользователя в моей таблице пользователей с таким же сеансом.