Laravel 5 - 用户在会话生命周期后不注销

Posted

技术标签:

【中文标题】Laravel 5 - 用户在会话生命周期后不注销【英文标题】:Laravel 5 - User not logout after session lifetime 【发布时间】:2019-06-17 17:42:34 【问题描述】:

我正在使用Laravel 5.7 并尝试获取它,以便我的会话过期并在 2 分钟后将我注销。

在我的session.php 文件中我做了:

'lifetime' => 2,

'expire_on_close' => false,

然后我会离开我的电脑,例如 15 分钟,回来,刷新,我仍然登录?

你能告诉我为什么以及如何解决它。非常感谢。


好的,我想通了。

原因是我在 Login 函数中使用了 Auth::logoutOtherDevices,这个函数会自动生成 remember me cookie。

非常感谢你们。

【问题讨论】:

您是否在登录表单中点击了记住我?这将使用户无限期地保持身份验证,或者直到他们手动注销。 docs 不,我的登录表单没有记住我的选项。同样在我的代码中,我将记住我设置为 false Auth::attempt(['email' => $email, 'password' => $password], false) 您是否在任何时候修改过登录逻辑?如果你这样做了,你能添加更新的代码吗?另外,您是否在更改后注销/登录? (它不应该是必需的,但仍然......) 或者您是否有任何在后台触发的 ajax 调用会持续“刷新”会话? 不,我尝试创建新的会话数据,2 分钟后数据消失了,但身份验证仍然存在 【参考方案1】:

更新 .env 文件

SESSION_LIFETIME=2

【讨论】:

另外,不要勾选记住我。顺便说一句,SESSION_LIFETIME 不仅仅是 .env 中的生命周期。 不,我的登录表单没有记住我的选项。同样在我的代码中,我将记住我设置为 false Auth::attempt(['email' => $email, 'password' => $password], false)【参考方案2】:

从文档看来,生命周期以秒为单位,因此生命周期为

SESSION_LIFETIME=120 而不是2


编辑:请您尝试设置选项:

'expire_on_close' => true,

这将强制会话在浏览关闭时过期。

我在这里找到了您问题的潜在答案:Laravel - Auth Session not expiring after browser close

听起来可能是 chrome 问题。

在 Firefox 上尝试您的解决方案,看看是否是 chrome 问题。

阅读我链接的那个线程。

【讨论】:

config/session.php 中有一条注释您可以在此处指定您希望会话在到期前保持空闲的分钟数 但我还是想知道为什么我的应用不能正常工作 你在用redis吗?因为它可能是你的 redis 缓存会话。 @SweetChillyPhilly on firefox 'expire_on_close' => true 不起作用。有人找到解决此问题的方法吗?【参考方案3】:

请务必检查您的配置。 在 Session.php 中,将生命周期设置为您想要的会话到期时间。 同样在升级版本的 laravel 会话生命周期不再设置硬,而是取自 .env 文件。

您可以尝试以下配置。 在你的config/session.php

'lifetime' => env('SESSION_LIFETIME', 2),

并在您的.env 文件中设置以下键

SESSION_LIFETIME=2

【讨论】:

以上是关于Laravel 5 - 用户在会话生命周期后不注销的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.2:在用户登录/注销和注册后显示会话闪烁消息

如何在 Laravel 5.x 中注销过期会话?

Laravel 4 cookie 会话生命周期自动更改

Laravel 5.0 扩展了“注销”功能

会话过期的 laravel 事件监听器,因为会话过期时没有调用注销事件监听器

Laravel 会话超时,额外的注销代码