我正在使用Laravel 4.2的身份验证机制,我正在试图弄清楚何时以及如何设置“记住我”cookie令牌。
由于某些原因,当我执行以下代码时,即使第二个参数是false
,当我关闭浏览器并重新打开它时,我仍然会自动登录而无需输入用户名和密码。所以实际上它总是表现得像是“记住我”一样,即使它是false
。
我的验证码:
//called on POST of login page with credentials
$userdata = array(
'email' => Input::get('email'),
'password' => Input::get('password')
);
// attempt to do the login
if (Auth::attempt($userdata, false))
{
//redirect to main secure page
我在登录页面上检查以检查用户是否已经过身份验证:
//called on GET of login page
if (Auth::check())
{
//user already logged in, redirect to main secure page immediately
即使传递了Auth::attempt()
false
,当我关闭浏览器并重新打开它时,Auth::check()
仍会返回true,这通常会清除所有会话。
当我以前在PHP中手动进行身份验证(不使用Laravel的身份验证方法)时,我常常使用类似的东西:
//authenticate the user with the DB and get the $user object
$_SESSION['user'] = $user; //set it in the session
然后在我的安全页面中,我会检查用户是否通过执行以下操作登录:
if (isset($_SESSION['user']))
{
//user already logged in ...
在这种情况下,关闭浏览器并重新打开它会清除会话。 (我刚刚使用我的一个较旧的webapps验证了这一点,它仍然表现得那样,所以它不是一些浏览器问题。)
Laravel有没有理由不以这种方式行事?如果它仍然在浏览器会话中保留身份验证会话,那么传递“记住我”标志的重点是什么? 有没有办法禁用此行为并使其正常工作(即当浏览器关闭时,会话不再保留)?
答案 0 :(得分:4)
好的似乎除了config/auth.php
配置之外,config/session.php
中有更详细的会话配置,我想要的实际上就是那个文件。
该文件中的'expire_on_close' => false
设置是导致此行为的原因,并将其更改为true
会立即解决问题。
默认情况下不确定为什么false
。如果人们只是在没有退出应用程序的情况下关闭浏览器就不安全了(因为他们不会检查“记住我”,他们会认为应用程序不会记住它们并且该会话将被销毁),其他人打开浏览器,并能够访问相同的安全页面。
无论如何,如果有人需要,可以发布回答。