2015-01-20 3 views
1

Мы используем PHP и сохраняем данные сеанса в memcached. Есть ли способ аннулировать все сеансы с помощью данного идентификатора пользователя? В случае использования, когда пользователь меняет свой пароль, мы выходим из системы, однако мы также должны быть недействительными для каждого другого сеанса под этим идентификатором пользователя.Недействить все сеансы с помощью идентификатора пользователя с помощью PHP

Возможно ли это?

ответ

0

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

Прежде всего необходимо иметь запись в бэкэнд-магазине, содержащую временную метку, в которой был обновлен пароль пользователя. Когда пользователь входит в систему, вы можете написать файл cookie с отметкой времени или сохранить его в сеансе. При последующих запросах/проверках, если дата файла cookie/сеанса новее, чем дата изменения пароля, она проходит. Когда пароль изменяется, дата на исходной записи устанавливается на текущую временную метку, и следующая проверка завершится неудачей и уничтожит сеанс пользователя.

Таким образом, фактическое аннулирование не произойдет, пока следующий запрос не поступит из старого сеанса.

+0

Это элегантно. Я думал о сохранении текущего идентификатора сеанса и идентификатора пользователя в базе данных, а затем просто вызывал 'session_id ($ session_id_to_destroy); session_start(); session_destroy(); session_write_close(); ' – Justin

+0

Учет того, что вы можете столкнуться с проблемами синхронизации между этим и вашим фактическим хранилищем сеансов. Вам нужно будет сохранить все идентификаторы сеанса, которые пользователь активен в этой таблице, и убедитесь, что вы удалите их, когда пользователь выходит из системы или недействителен в обычном процессе. –

Смежные вопросы