Как я могу отменить сеанс конкретного пользователя?

У меня такая сессия $_SESSION['login'] и когда он равен 1, это означает, что использование зарегистрировано на моем сайте:

if ( $_SESSION['login'] == 1 ) {
    // You are logged
} else {
    // login/register
}

Также у меня есть другой сеанс, который содержит идентификатор пользователя. Что-то вроде этого:

echo $_SESSION["Id"]; 
/* It is containing the user's id (an integer number).
   Something like: 234124
*/

Теперь хочу сбросить $_SESSION['login'] для пользователя, который имеет конкретный идентификатор. Например я хочу unset($_SESSION['login']) за $_SESSION["Id"] = 234124, Как я могу это сделать?


Изменить: все, что я пытаюсь сделать: когда пользователь меняет свой пароль, я удаляю все его куки из cookies стол, чтобы выписать его из всех его других устройств. Также я хочу удалить свою сессию.

1 ответ

Если я понял ваше право, вы хотите полностью выйти из системы, то есть из всех сеансов (с ноутбука, мобильного телефона и т. Д.).

Это возможно только когда 1) у вас есть отображение user_id => session_id и 2) вы можете запросить сессии как-то. Например, когда вы сохраняете сеансы в таблице базы данных и у вас есть user_id в качестве столбца в этой таблице, вы можете просто удалить все сеансы для пользователя (или просто изменить их).

Но это невозможно с стандартным обработчиком сессии PHP. У вас нет такого типа картографирования.

Я советую вам написать собственный обработчик сеансов, который будет хранить сеансы в таблице базы данных. Чтобы построить отображение, вы можете переопределить write метод и извлечь свой user_id там. Будьте осторожны с сериализованными данными, обратите внимание на session.serialize_handler директива конфигурации

Например,

php.ini

session.serialize_handler = php_serialize

обработчик сеанса

public function write($id, $data)
{
    $content = unserialize($data);

    return $this->db->insert('sessions', [
        'id' => $id,
        'user_id' => $content['user_id'],
        'data' => $data,
    ]);
}

и контрольный код

if (...) {
    $db->execute('DELETE FROM sessions WHERE user_id = ?', $userId);
}
Другие вопросы по тегам