Yii. Logout

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

Экспериментировал так:
1. Логинюсь в Фаерфоксе
2. Логинюсь в Хроме
3. Разлогиниваюсь в Фаерфоксе (Yii::app()->user->logout(true);) (http://www.yiiframework.com/doc/api/1.1/CWebUser#logout-detail)
4. В Хроме сессия остается активной.

Вероятно, я не понимаю сути работы сессий... но при логауте и уничтожении сессии (Yii::app()->getSession()->destroy();), я ожидаю выхода со всех устройств.. или я не прав?

1 ответов


Вы просто не понимаете механизм авторизации, в этом и вся проблема.
Сессия - это файловое хранилище данных. Ключ от него находится в cookies определенного браузера. Обратите внимание, не о самом пользователе он ничего не знает, просто указывает, какой браузер воспользовался данным хранилищем. Один браузер ничего не знает о кукисах второго, поэтому подобный метод не эффективный.
Удаление сессии удаляет не все существующие сессии, а только файл с информацией, "ключ" от которого в переменной PHPSESSID хранит браузер.

Что сделать? Переписать авторизацию:
1) используя базу данных
2) используя ключи доступа. Для каждой авторизации в кукисы дается новый случайный ключ, который в то же время записывается в таблицу. При "выходе" этот ключ удаляется с таблицы базы данных и с кукисов. При необходимости выйти со всех устройств, удаляем в таблице все ключи определенного пользователя, что делает его ключ в кукисах невалидным.

В общем, более подробно интересуйтесь в статьях на тему yii (поверьте, описанный мною механизм авторизации не раз описан), смотрите документацию, либо поищите готовые модули на сайте.