我正在使用laravel 4.0.x,并使用以下代码将 remember_me Cookie到期日期重置为1个月(因为默认值为5年):
App::after(function($request, $response)
{
// If the user is tryin to log_in and he wants to stay logged in, reset the remember_me cookie expiration date from 5 years to 1month
$remember = Input::get('remember',false);
if ($remember) {
if ( Auth::check()){ // check if the user is logged in
$ckname = Auth::getRecallerName(); //Get the name of the cookie, where remember me expiration time is stored
$ckval = Cookie::get($ckname); //Get the value of the cookie
return $response->withCookie(Cookie::make($ckname,$ckval,43200)); //change the expiration time to 1 month = 43200 min
}
}
该代码当然来自 app \ filters.php ,它的工作方式就像魅力一样。
我最近更新了laravel从4.0.x到v4.1.28,现在remember_me cookies被设置为5年,我试着在最后几个小时挖掘代码试图调试但没有运气:(。
请注意,在上面代码的最后一行中将 $ ckname 更改为其他值(如“test”)工作正常,它会创建一个“test”像我预期的1个月到期的cookie
return $response->withCookie(Cookie::make("test",$ckval,43200));
我真的不明白为什么remember_me cookie会持续到5年的到期日期!
任何帮助将不胜感激:) 阿卜杜迪。
问题不在于我为什么要更改cookie的到期日期,但这就是为什么cookie不会更新?! 。感谢。
答案 0 :(得分:1)
这是Laravel的故意行为。
remember_me设置是"永久"记住用户,直到他们退出'申请书。
如果你深入了解Auth课程 - 它明确表示它是一个永久性的cookie"。
public function login(UserInterface $user, $remember = false)
{
$this->updateSession($user->getAuthIdentifier());
// If the user should be permanently "remembered" by the application we will
// queue a permanent cookie that contains the encrypted copy of the user
// identifier. We will then decrypt this later to retrieve the users.
if ($remember)
{
$this->createRememberTokenIfDoesntExist($user);
$this->queueRecallerCookie($user);
}
无法将Cookie设置为“永久”之外的任何其他内容。 (又名5年)。
另外 - the Laravel docs表示记住我是永远的:
如果您想提供"请记住我"在您的应用程序中,您可以将true作为第二个参数传递给attempt方法,这将使用户经过身份验证无限期(或直到他们手动注销)
编辑:当您更新了问题时 - 我对此进行了更多调查。这对我有用:
public function login()
{
if (Auth::attempt(array('email' => Input::get('email'), 'password' => ), true))
{
$ckname = Auth::getRecallerName();
Cookie::queue($ckname, Cookie::get($ckname), 43200);
return View::make('welcome');
}
}
它只设置' remember_me'饼干到1个月。