检查 Laravel 中的会话超时

问题描述 投票:0回答:4

我只是想知道是否有人知道如何在 Laravel 中检查会话超时。

您可以检查会话是否有特定项目:

if (Session::has('name'))
{
     $name = Session::get('name');
}

但是你无法检查会话是否已过期。如果我能够以更具体的方式向用户报告,那就太好了。 “您的会话已超时,请重新开始。”

有什么想法吗?

php laravel laravel-3
4个回答
29
投票

只需使用与会话类本身相同的逻辑即可。

if ((time() - Session::activity()) > (Config::get('session.lifetime') * 60))
{
   // Session expired
}

将其放在“之前”过滤器中 - 它将根据每个请求运行。


2
投票

为什么不这样做呢?

if (!Session::has('name'))
{
     $sessionTimeout = 1;
}

如果会话超时,则将不再设置名称。然后你可以编写一些代码来响应 $sessionTimeout == 1;


0
投票

顺便说一句, 特别是如果您需要会话生命周期,

使用这个:

{{ session('lifetime') }}

描述这一点时,

使用这个:

session(['User' => $user, 'lifetime' => 3600]);

0
投票

从 Laravel 8 开始,最好的解决方案似乎是使用这样的东西:

if(session()->missing("name") && session()->missing("email")) {
   // Replace with your own logic to handle the missing session       
   throw SessionNotFoundException;
}

...其中

name
email
都是会话中应始终存在的两个会话密钥。检查两个密钥更加可靠,并且可以防止由于错误而仅丢失其中一个密钥时触发条件。

© www.soinside.com 2019 - 2024. All rights reserved.