Как я могу предотвратить несколько сеансов на пользователя в ci_sessions (таблица БД)? - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь избежать нескольких сеансов для пользователей, когда они входят в мое приложение.Допустим, текущее поведение восстанавливает сеансы по метке времени, поэтому для каждого пользователя будет более одного сеанса, я хочу этого избежать.

Мои текущие таблицы выглядят так:

  • 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 у каждого пользователя в моей таблице пользователей с таким же сеансом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...