当用户离开页面时,使Laravel中的登录无效


Invalidate login in Laravel when user leaves the page

这似乎是一个小而容易解决的问题,但我找不到任何解决方案。

我只想在用户浏览网站时登录该会话的用户。一旦他们关闭标签,我想让他们的会话过期。据我所知,我无法在内置的Auth类中做到这一点。

我怎样才能有效地做到这一点?

简短回答:你不能

整个浏览器关闭时,只需在config/session.php中设置expire_on_close即可销毁会话(同时确保清除浏览器中的cookie即可):

'expire_on_close' => true,

但是,无法检测浏览器中只有选项卡关闭的情况。最接近的是JavasScript方法onbeforeunload,当你关闭一个选项卡时它会触发。但当你离开页面或点击后退按钮时,它也会触发,而且无法区分这些操作。


你可以在服务器上设置一个非常短的会话时间,并在任何打开的页面上"ping"服务器,让它知道会话仍在使用,这意味着当打开应用程序的选项卡关闭时,会话会很快过期,但这是一个非常糟糕的解决方案。

由于PHP是服务器端代码,它只知道上次访问的时间/页面。

请参阅:在离开的页面上销毁PHP会话