我只是想知道是否有人知道如何在 Laravel 中检查会话超时。
您可以检查会话是否有特定项目:
if (Session::has('name'))
{
$name = Session::get('name');
}
但是你无法检查会话是否已过期。如果我能够以更具体的方式向用户报告,那就太好了。 “您的会话已超时,请重新开始。”
有什么想法吗?
只需使用与会话类本身相同的逻辑即可。
if ((time() - Session::activity()) > (Config::get('session.lifetime') * 60))
{
// Session expired
}
将其放在“之前”过滤器中 - 它将根据每个请求运行。
为什么不这样做呢?
if (!Session::has('name'))
{
$sessionTimeout = 1;
}
如果会话超时,则将不再设置名称。然后你可以编写一些代码来响应 $sessionTimeout == 1;
顺便说一句, 特别是如果您需要会话生命周期,
使用这个:
{{ session('lifetime') }}
描述这一点时,
使用这个:
session(['User' => $user, 'lifetime' => 3600]);
从 Laravel 8 开始,最好的解决方案似乎是使用这样的东西:
if(session()->missing("name") && session()->missing("email")) {
// Replace with your own logic to handle the missing session
throw SessionNotFoundException;
}
...其中
name
和 email
都是会话中应始终存在的两个会话密钥。检查两个密钥更加可靠,并且可以防止由于错误而仅丢失其中一个密钥时触发条件。