src/Handler/SessionIdleHandler.php line 57

  1. use Symfony\Component\HttpKernel\Event\RequestEvent;
  2. use Symfony\Component\HttpKernel\HttpKernelInterface;
  3. use Symfony\Component\Routing\RouterInterface;
  4. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  5. use Symfony\Component\Security\Core\Authorization\AuthorizationChecker;
  6. final class SessionIdleHandler
  7. {
  8.     public function __construct(
  9.         private TokenStorageInterface $tokenStorage,
  10.         private RouterInterface $router,
  11.         private AuthorizationChecker $authorizationChecker,
  12.         private int $maxIdleTime 0
  13.     ) {
  14.     }
  15.     public function onKernelRequest(RequestEvent $event): void
  16.     {
  17.         if (HttpKernelInterface::MAIN_REQUEST != $event->getRequestType()) {
  18.             return;
  19.         }
  20.         if ($this->maxIdleTime 0) {
  21.             $session $event->getRequest()->getSession();
  22.             $session->start();
  23.             $lapse time() - $session->getMetadataBag()->getLastUsed();
  24.             if ($lapse $this->maxIdleTime && $this->authorizationChecker->isGranted('ROLE_USER')) {
  25.                 $this->tokenStorage->setToken();
  26.                 $event->setResponse(
  27.                     new RedirectResponse(
  28.                         $this->router->generate(
  29.                             'security_login',
  30.                             ['session_idle' => true]
  31.                         )
  32.                     )
  33.                 );
  34.             }
  35.         }
  36.     }
  37. }