Laravel认证没有记住我的令牌


Laravel authentication without remember me token

我正在使用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 ...

在这种情况下,关闭浏览器并重新打开会清除会话。(我刚刚用我的一个旧的网络应用程序再次验证了这一点,它仍然是这样,所以这不是浏览器的问题)。

拉拉维尔不这样做有什么原因吗?如果它在浏览器会话之间保留身份验证会话,那么传递"记住我"标志有什么意义?有没有办法禁用这种行为并使其正常工作(即,当浏览器关闭时,会话不再保留)?

OK似乎除了config/auth.php配置之外,config/session.php中还有一个更详细的会话配置,我想要的实际上就在那个文件中。

该文件中的设置'expire_on_close' => false导致了这种行为,将其更改为true会立即解决问题。

不确定为什么默认为false。如果人们在没有注销应用程序的情况下关闭浏览器(因为他们不会选中"记住我"标志,他们会认为应用程序不会记住他们,会话就会被破坏),而其他人打开浏览器,就可以访问安全页面,这是不安全的。

无论如何,张贴答案以备有人需要。