我正在使用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
。如果人们在没有注销应用程序的情况下关闭浏览器(因为他们不会选中"记住我"标志,他们会认为应用程序不会记住他们,会话就会被破坏),而其他人打开浏览器,就可以访问安全页面,这是不安全的。
无论如何,张贴答案以备有人需要。