Я хочу выйти из системы из любого браузера, когда он сменит свой текущий пароль.
Я поместил код в мою функцию контроллера после сохранения нового пароля в базе данных:
$session = Yii::$app->session;
unset($session['id']);
unset($session['timestamp']);
$session->destroy();
Это работает только для браузера, откуда я сменил пароль. но не для всех браузеров.
Я проверил переменную сеанса — $session['id']
существует или нет. Я вижу, что он существует в другом браузере, даже после того, как я изменил свой пароль из другого браузера.
Это, конечно, возможно, используя 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 принадлежит тому же пользователю, который сейчас входит в систему. Если вы используете сеансы базы данных, это должно быть достаточно просто.
Я могу представить, что вы могли бы сделать это, используя собственную обработку сеансов. Если вы храните ваши сессии в базе данных.
Связанная проблема @ github / yii2:
Пользователь остается авторизованным, несмотря на изменение ключа авторизации # 9718:
https://github.com/yiisoft/yii2/issues/9718