Уничтожить сессию вместо очистки в Laravel? - PullRequest
0 голосов
/ 05 июля 2019

Я попытался найти место, где Laravel уничтожает сеанс в стандартных лесах Auth, но я не могу его найти. Я CAN однако найду место, где он очищен . Функция logout() по умолчанию в AuthenticateUsers.php:

/**
 * 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(); указывает на функцию invalidate() в Store.php, которая указывает на flush() также в Store.php. Однако эта функция только очищает сеанс, но не уничтожает его:

/**
 * Remove all of the items from the session.
 *
 * @return void
 */
public function flush()
{
    $this->attributes = [];
}

Итак, мой вопрос здесь: Уничтожает ли Laravel сеанс даже в стандартных лесах Auth? Если да, то где он это делает? Я абсолютно не могу найти его, и я искал часы.

p.s. не помечайте это как дубликат, потому что использование Session :: flush () не является ответом на мой вопрос.

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

Вы можете использовать метод destroy () сеанса, чтобы полностью уничтожить его, попробуйте использовать,

$request->session()->destroy();

Поместите это в свой метод выхода из системы или после вызова этого метода, чтобы он получал уничтожение после выхода изсистема.

0 голосов
/ 05 июля 2019

Хорошо, так что я просто нашел это. Оказывается, я все это время был слепым.

Функция invalidate() в Store.php возвращает $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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...