当用户登录我的Laravel应用程序时,我希望他们有两个选择:
- 如果未选中"记住我"复选框,则会话在浏览器关闭时过期
- 如果选中"记住我",则会话在处于非活动状态 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 恢复经过身份验证的用户。
因此,就
当前会话配置的方案而言,发生的情况如下:
- 如果未选中"记住我">,则用户会话将在浏览器关闭时过期(生命周期无用(
- 如果选中"记住我",则用户会话只会在 5 年后过期,或者如果您删除了记住 cookie 或注销用户(当用户被">记住">时,
config/session.php
中的设置对用户会话没有影响(。
因此,标准Laravel身份验证系统无法实现您想要的。