Laravel-在登录时销毁现有会话

Vig*_*igs 3 php authentication session 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
Run Code Online (Sandbox Code Playgroud)

我还没有机会进行测试,也不知道是否Auth::login($user);会破坏该用户的所有会话,或者仅破坏当前会话。

谢谢!

tec*_*nik 6

您可以在用户模型中保存一个session_id,以便:

  1. 当注销事件被触发(auth.logout)时,您将清除它。

  2. 当触发新的日志记录事件时,您可以检查用户模型中的属性session_id是否不为null。

  3. 如果不是,请通过以下方法销毁上一个会话:

会话:: getHandler()-> destroy($ user-> session_id);

$ user-> session_id =会话:: getId();

希望对您有所帮助!