【发布时间】:2019-08-10 07:38:51
【问题描述】:
Laravel 5.7 中是否有办法找出用户在当前会话到期之前还剩下多少时间?
已编辑
我还想检查访客和登录用户的当前会话何时到期。
此外,在当前答案中,似乎存在相互矛盾的想法,即会话将在登录后恰好“SESSION_LIFETIME”分钟到期,而其他人则认为会话在最后一次用户活动后到期。最好澄清哪个是正确的。然后还有如何获取最后一次活动时间以及会话中的活动分类。
另外,我认为 Session::activity() 已在 Laravel 5.7 中删除。
可能的解决方案
感谢下面的@bharat-geleda,如果您使用 Laravel 5.7 并在数据库中存储会话,这是一个可行的解决方案。
$last_activity = \DB::table('sessions')->select('last_activity')->where('id', session()->getId())->first()->last_activity;
$session_time_remaining_minutes = ($last_activity + (\Config::get('session.lifetime') * 60) - time()) / 60;
dd($session_time_remaining_minutes);
我目前不清楚“last_activity”何时更新,但它不会在页面刷新时发生。
【问题讨论】:
-
您可以使用
Session::activity()获取上次会话活动完成的时间。 -
@BharatGeleda Session::activity() 似乎在 5.7 中被删除
-
@BharatGeleda 我查看了“在 Laravel 中检查会话超时”问题,但我想找出剩余的到期时间,而不是它是否过期。所以我认为这是一个不同的问题。
-
好吧,如果你能得到最后一个活动,你可以像这样计算等待时间
Session::activity() + (Config::get('session.lifetime') * 60) - time() -
如果你使用 DB,你可以使用类似
DB::table('sessions')->select('last_activity')->where('id', $request->session()->get('id'))->first();的东西来获取最后一个活动
标签: laravel session laravel-5.7