Есть ли способ проверить, имеет ли пользователь уже действующий сеанс на другом компьютере?
То, что я хочу сделать, – это когда пользователь входит в систему, уничтожает другие сеансы, которые у них уже есть, поэтому, если они забывают выйти из компьютера, говорят в кампусе или на работе, а затем они заходят в дом, он уничтожит эти другие 2 сеанса, чтобы они больше не вошли в систему?
Facebook использует это в некотором роде.
Мои единственные мысли до сих пор что-то в этом роде:
$user = User::find(1); // find the user Auth::login($user); // log them in Auth::logout(); // log them out hoping that it will destroy all their sessions on all machines Auth::login($user); // log them in again so they have a valid session on this machine
У меня не было возможности проверить это, и я не знаю, будет ли Auth::login($user);
уничтожит все сеансы для этого пользователя или только текущий.
Благодаря!
Вы можете сохранить session_id в пользовательской модели, чтобы:
Когда выйдет событие выхода из системы (auth.logout), вы очистите его.
Когда запускается новое событие регистрации, вы можете проверить, не имеет ли атрибут session_id значение null в пользовательской модели.
Если это не так: уничтожить предыдущую сессию:
Session :: getHandler () -> destroy ($ user-> session_id);
$ user-> session_id = Session :: getId ();
Надеюсь, что это поможет!
Надеюсь, вы увидите эту работу:
Session::regenerate(true);
новый session_id будет получен.
Это, возможно, не лучший ответ, но первое, что мне показалось, – это снижение таймаута на сессии.
В app-> config-> session.php есть параметр как для lifetime, так и для expire_on_close (браузер).
На данный момент я попытаюсь изучить это, и посмотрим, сможет ли кто-то еще что-то улучшить.