Обновлено Ответ
Вы ввели полезную информацию в комментариях:
Когда пользователь изменяет свой пароль, мне нужно выйти из системы его счет от всех других его устройств.
Ваш вопрос заключается в том, как реализовать единый логин/выход из системы на всех устройствах, если вы используете сеансы.
Вот простой подход:
- Пользователь входит в систему, вы установите
userID
и lastSeen
в сессии. lastSeen
имеет временную метку. Не сохраняйте информацию в сеансе, которую пользователь может изменить.
- пользователь входит в другое устройство, вы установите
userID
и lastSeen
в этой сессии
- Сессии через устройство всегда синхронизирована (за
lastSeen
исключением), потому что они только держать не-изменение данных (идентификатор пользователя, имя пользователя)
- В вашем DB, имеет
logout
таблицу со столбцами userID
requestTime
- Если пользователь выходит из системы, изменяет свой пароль, или делает что-нибудь еще, что должно требовать повторного входа, вызовите
session_destroy()
и добавить запись в таблице logout
- Когда пользователь TRIE s для доступа к запретной страницу, проверьте:
$_SESSION['userID']
существует ли (значит пользователь вошел в какой-то момент)
- ли
lastSeen
в течение последних 30 минут (в противном случае, вызовите session_destroy()
и запросить другой логин)
- ли есть запрос на выход с идентификатором пользователя в
logout
и с requestTime > lastSeen
(с тех пор как мы в последний раз видели пользователя, она попросила выйти из другого устройства). Если это так, session_destroy()
и требуется другой логин.
Оригинал ответ
Сессия обрабатывается в изоляции. Когда приходит запрос, данные $_SESSION
для этого пользователя загружаются в память. Поэтому, если userID 5 делает запрос, у вас нет доступа к данным сеанса для пользователя 7 (без некоторых хаков).
Если вы хотите сбросить сеанс текущего пользователя, кто может быть, что пользователь, вы можете выполнить одно из следующих действий:
session_destroy(); //clears everything for the current user
unset($_SESSION['login']);// clears just this variable for the current user
Если из сеанса просмотра одного пользователя, вы хотите возиться с другим пользователем: Я не вижу прецедента. Похоже, что это будет иметь негативные последствия для безопасности, и это заставляет меня подвергать сомнению вашу большую архитектуру. Это поражает всю цель сеансов: предоставить каждому пользователю изолированный, постоянный хранилище на сервере.
В любом случае, чтобы изменить данные сеанса случайного пользователя из другой активности пользователя (опять же, зачем?), Используйте базу данных для сохранения и получения значений. Стол может быть как простой, как:
userID | sessionData | sessionExpires
Вы можете хранить данные сессии в формате JSON с json_encode
и получить его с json_decode
для любого конкретного пользователя, из любого сеанса просмотра.
session_start(); session_destroy(); весь сеанс, который вы создали ранее, будет уничтожен. –
Мой вопрос спрашивает: как я могу это сделать для конкретного пользователя? – stack
oh right @stack I непонятый вопрос. –