销毁会话而不是在Laravel中清除会话?

时间:2019-07-05 07:55:43

标签: php laravel session

我尝试在默认的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()不能解决我的问题。

2 个答案:

答案 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();

将其放入注销方法或该方法的调用之后,以便从系统注销后销毁它。