Yii2: выход из любого браузера после смены пароля пользователя

Я хочу выйти из системы из любого браузера, когда он сменит свой текущий пароль.
Я поместил код в мою функцию контроллера после сохранения нового пароля в базе данных:

$session = Yii::$app->session;
unset($session['id']);
unset($session['timestamp']);
$session->destroy();

Это работает только для браузера, откуда я сменил пароль. но не для всех браузеров.
Я проверил переменную сеанса — $session['id'] существует или нет. Я вижу, что он существует в другом браузере, даже после того, как я изменил свой пароль из другого браузера.

5

Решение

Это, конечно, возможно, используя session_id, Когда пользователь входит в систему где-то еще, вы можете сделать этот шаг перед началом нового сеанса для нового имени входа:

// The hard part: find out what $old_session_id is
$session = Yii::$app->session;
unset($session['old_id']);
unset($session['timestamp']);
$session->destroy();


// Now proceed to create a new session for the new login

Это разрушит старый сеанс на стороне сервера, поэтому, когда другой компьютер снова получит доступ к вашему приложению, он попытается получить доступ к несуществующему сеансу, и для него будет создан новый (в котором пользователь больше не вошел в систему) ,

Сложная часть заключается в том, чтобы узнать, каков «старый» сеанс. Не существует универсального способа сделать это; у вас должен быть какой-то механизм, позволяющий определить, что сеанс с идентификатором XXX принадлежит тому же пользователю, который сейчас входит в систему. Если вы используете сеансы базы данных, это должно быть достаточно просто.

Я могу представить, что вы могли бы сделать это, используя собственную обработку сеансов. Если вы храните ваши сессии в базе данных.

1

Другие решения

Связанная проблема @ github / yii2:

Пользователь остается авторизованным, несмотря на изменение ключа авторизации # 9718:
https://github.com/yiisoft/yii2/issues/9718

0