Laravel – уничтожить существующие сеансы при входе в систему

Есть ли способ проверить, имеет ли пользователь уже действующий сеанс на другом компьютере?

То, что я хочу сделать, – это когда пользователь входит в систему, уничтожает другие сеансы, которые у них уже есть, поэтому, если они забывают выйти из компьютера, говорят в кампусе или на работе, а затем они заходят в дом, он уничтожит эти другие 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 в пользовательской модели, чтобы:

  1. Когда выйдет событие выхода из системы (auth.logout), вы очистите его.

  2. Когда запускается новое событие регистрации, вы можете проверить, не имеет ли атрибут session_id значение null в пользовательской модели.

  3. Если это не так: уничтожить предыдущую сессию:

Session :: getHandler () -> destroy ($ user-> session_id);

$ user-> session_id = Session :: getId ();

Надеюсь, что это поможет!

Надеюсь, вы увидите эту работу:

 Session::regenerate(true); 

новый session_id будет получен.

Это, возможно, не лучший ответ, но первое, что мне показалось, – это снижение таймаута на сессии.

В app-> config-> session.php есть параметр как для lifetime, так и для expire_on_close (браузер).

На данный момент я попытаюсь изучить это, и посмотрим, сможет ли кто-то еще что-то улучшить.