Laravel 身份验证会话超时

Posted

技术标签:

【中文标题】Laravel 身份验证会话超时【英文标题】:Laravel Auth session timeout 【发布时间】:2019-07-26 06:45:26 【问题描述】:

我在这方面看到了几个问题,到目前为止,所有回复似乎都集中在检测下一个用户操作的过期时间。 不管能够做到这一点,我想要的是让服务器端代码检测到过期,然后强制刷新用户屏幕。从概念上讲,这个过程是这样的:

    在服务器端检测到过期 (可选)向用户发送一条消息,询问他们是否希望继续。如果没有响应,请强制注销过程并相应地通知用户。如果用户确认他们想要保持会话,然后模拟一些活动来重置过期时间。如果没有消息发送,只需强制一个新屏幕。

在我的例子中,我使用 Auth 登录并授予用户管理权限。这包括访问维护表格/按钮。

基本上,我不想要的是一个屏幕,因为它已过期,表明用户 a) 仍处于登录状态,并且 b) 显示他们当时正在做的事情的详细信息。如果用户拥有特殊权限,他们不应在到期后保持可见。例如,管理员正在更改用户的个人详细信息并被叫走。鉴于他/她应该终止进程并退出,如果他们未能执行此操作,则不应将详细信息留在屏幕上以供其他人稍后查看。

理想的情况是某种形式的事件监听器,但即便如此我也不确定如何在不运行 JS 计时器循环的情况下强制屏幕更改。

我假设我不是唯一一个有这种要求的人,所以我的问题是......

你如何在 Laravel 5 的约束下处理这种类型的需求?

【问题讨论】:

【参考方案1】:

会话的默认值在 config/session.php 下定义。您可以使用配置辅助函数config('session.lifetime') 获取该值。

在您的情况下,您需要检查客户端的会话时间(javascript)。

这是一个在会话到期之前刷新页面的代码示例。此代码用于刀片模板。

@if (Auth::check()) 
    <script>
    var timeout = (config('session.lifetime') * 60000) -10 ;
    setTimeout(function()
        window.location.reload(1);
    ,  timeout);



    </script>
@endif

您可以调整代码以通过对话框提示确认用户是否要延长其会话时间并执行 ajax 来获取或刷新会话时间。

【讨论】:

以上是关于Laravel 身份验证会话超时的主要内容,如果未能解决你的问题,请参考以下文章

asp.net cookie、身份验证和会话超时

ASP.NET 窗体身份验证超时和会话超时

Laravel - 使用会话令牌进行身份验证

身份验证登录时的 Laravel 超时

在 laravel 5.2 中使用默认身份验证路由对用户进行身份验证后设置会话数据

MVC 身份验证超时/会话 cookie 删除后的 Ajax 请求