我尝试在默认的Auth脚手架中寻找Laravel销毁会话的位置,但找不到。我可以,但是找到清除的地方。 AuthenticateUsers.php中的默认logout()
函数:
/**
* Log the user out of the application.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function logout(Request $request)
{
$this->guard()->logout();
$request->session()->invalidate();
return $this->loggedOut($request) ?: redirect('/');
}
$this->guard()->logout();
指向StatefulGuard.php:
/**
* Log the user out of the application.
*
* @return void
*/
public function logout();
$request->session()->invalidate();
指向Store.php中的invalidate()
函数,也指向Store.php中的flush()
。但是,此功能仅清除会话,不会破坏会话:
/**
* Remove all of the items from the session.
*
* @return void
*/
public function flush()
{
$this->attributes = [];
}
所以我的问题是: Laravel甚至会在默认的Auth脚手架中销毁会话吗?如果这样做:它在哪里执行的?我绝对找不到它,而且我已经搜索了几个小时。
p.s。不要将其标记为重复项,因为使用Session :: flush()不能解决我的问题。
答案 0 :(得分:0)
好的,所以我实际上才找到它。原来我一直都是瞎子。
Store.php中的invalidate()
函数返回 $this->migrate(true)
。此函数使用默认的PHP SessionHandlerInterface破坏会话:
/**
* Generate a new session ID for the session.
*
* @param bool $destroy
* @return bool
*/
public function migrate($destroy = false)
{
if ($destroy) {
$this->handler->destroy($this->getId());
}
$this->setExists(false);
$this->setId($this->generateSessionId());
return true;
}
答案 1 :(得分:0)
您可以使用session的destroy()方法完全销毁它,尝试使用,
$request->session()->destroy();
将其放入注销方法或该方法的调用之后,以便从系统注销后销毁它。