2017-05-25 89 views
0

我正在使用文件会话并尝试捕获用户注销时。不是当他们点击按钮注销,但当他们离开页面仍然登录。我有一个事件监听器设置注销,但似乎并没有触发。有没有人知道如何在会话注销发生时捕获或创建事件。Laravel 5.4从会话不活动中注销事件

Illuminate\Auth\Events\Logout' => ['App\Listeners\LogSuccessfulLogout',], 

回答

0

会话超时发生在客户端,所以您将无法检测到这种情况。

您可以做的最好的事情是保存每个用户的活动日志,并在每个请求上存储该用户的时间戳。然后,您可以通过将session.php Config::get('session.lifetime')中的生命期变量添加到活动表中的最新时间戳并将其与当前时间进行比较,从而确定哪些会话即将到期。

如果它大于或等于当前时间,那么您知道他们的会话已过期。

您可能需要设置一个全局中间件,该中间件会在每次登录用户请求后更新您的活动表,其中至少包含user_id列和timestamp列。

然后,您需要设置一个每分钟左右运行一次的作业,该作业从您的活动表中读取,抓取session.php中的配置值,并为其确定会话过期的每个用户激发用户注销事件。当开始发射时,您的听众应该开始拾取该事件。