我正在使用文件会话并尝试在用户注销时捕获。不是当他们点击按钮退出,而是当他们离开页面时仍然登录。我有一个事件监听器设置登出,但似乎没有触发。有没有人知道如何在会话注销时捕获或创建事件。
Illuminate\Auth\Events\Logout' => ['App\Listeners\LogSuccessfulLogout',],
答案 0 :(得分:1)
会话超时发生在客户端,因此您无法检测到何时发生。
您可以做的最好的事情是保留每个用户的活动日志,并在每个请求中存储该用户的时间戳。然后,您可以通过将session.php Config::get('session.lifetime')
中的生命周期变量添加到活动表中的最新时间戳并将其与当前时间进行比较来确定哪些会话即将到期。
如果它大于或等于当前时间,则表示他们的会话已过期。
您可能需要设置一个全局中间件来更新您的活动表,该活动表在每次登录用户请求后至少包含user_id
列和timestamp
列。
然后,您需要设置一个每分钟运行一次的作业,该活动从您的活动表中读取,在session.php中获取配置值,并为其确定会话到期的每个用户触发用户注销事件。当它开始触发时,你的'App\Listeners\LogSuccessfulLogout'
听众应该开始接收该事件。