Symfony 4, как закрыть сессию пользователя?

В Symfony 4 сессия пользователя может быть закрыта несколькими способами в зависимости от того, как реализована аутентификация в вашем приложении.

Если вы используете встроенную аутентификацию Symfony, вы можете просто вызвать метод invalidate() объекта сессии в контроллере или сервисе, чтобы закрыть сессию пользователя. Вот пример:

use SymfonyComponentHttpFoundationSessionSessionInterface;

class LogoutController
{
    private $session;

    public function __construct(SessionInterface $session)
    {
        $this->session = $session;
    }

    public function logout()
    {
        $this->session->invalidate();

        // Другие действия, если необходимо

        return $this->redirectToRoute('homepage');
    }
}

Вы также можете использовать сервис security.token_storage для инвалидации текущего токена аутентификации:

use SymfonyComponentSecurityCoreAuthenticationTokenStorageTokenStorageInterface;

class LogoutController
{
    private $tokenStorage;

    public function __construct(TokenStorageInterface $tokenStorage)
    {
        $this->tokenStorage = $tokenStorage;
    }

    public function logout()
    {
        $this->tokenStorage->setToken(null);

        // Другие действия, если необходимо

        return $this->redirectToRoute('homepage');
    }
}

Кроме того, если вы используете компонент SecurityBundle Symfony, у вас также есть возможность настроить параметры для автоматической аутентификации в файле security.yaml. Вы можете установить параметр invalidate_session в значение true, чтобы автоматически закрыть сессию пользователя при выходе:

security:
    firewalls:
        main:
            logout:
                invalidate_session: true

Надеюсь, эти примеры помогут вам закрыть сессию пользователя в Symfony 4.