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