在Laravel 4.2中设置时间后过期登录用户的会话



当用户登录我的Laravel应用程序时,我希望他们有两个选择:

  1. 如果未选中"记住我"复选框,则会话在浏览器关闭时过期
  2. 如果选中"记住我",则会话在处于非活动状态 10 分钟后过期

我通过以下方式实现用户登录:

Auth::attempt($userData, Input::has('remember'));

在我的session.php文件中,我有

'lifetime' => 10,
'expire_on_close' => true

如果未选中"记住我"复选框,则我的用户将在浏览器关闭时按预期注销。 如果选中,用户将无限期保持登录状态。 我假设使用上述配置,用户应在 10 分钟不活动后注销。

我在这里错过了什么?

有两种类型的 Cookie:

持久性 Cookie:一直存储到您手动删除它们或它们过期为止

会话 Cookie:在您关闭浏览器之前一直存储

lifetime设置将创建一个持久性 Cookie,根据该值将过期日期设置为未来 10 分钟。expire_on_close设置将创建一个会话 Cookie。

因为不能有两个名为 laravel_session 的 cookie,所以会话 cookie 胜过持久性 cookie。因此,当expires_on close设置为true时,您只会获得一个会话cookie,该cookie在浏览器关闭之前一直使用,并且忽略lifetime设置。


"记住我">选项是单独的选项,用于保留经过身份验证的用户。它不使用上述两个会话设置中的任何一个,因为它会创建自己的 cookie,到期日期设置为 5 年,并且只有在您调用 Auth::logout() 时才会被删除。因此,是否删除laravel_session cookie 并不重要,通过记住 cookie 恢复经过身份验证的用户。


因此,就

当前会话配置的方案而言,发生的情况如下:

  1. 如果未选中"记住我">,则用户会话将在浏览器关闭时过期(生命周期无用(
  2. 如果选中"记住我",则用户会话只会在 5 年后过期,或者如果您删除了记住 cookie 或注销用户(当用户被">记住">时,config/session.php中的设置对用户会话没有影响(。

因此,标准Laravel身份验证系统无法实现您想要的。

最新更新