Как я могу отменить сеанс конкретного пользователя?
У меня такая сессия $_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);
}