src/Security/SessionIdleHandler.php line 41

  1. <?php
  2. namespace App\Security;
  3. use Symfony\Component\Routing\RouterInterface;
  4. use Symfony\Component\HttpFoundation\RequestStack;
  5. use Symfony\Component\HttpKernel\Event\RequestEvent;
  6. use Symfony\Component\HttpKernel\HttpKernelInterface;
  7. use Symfony\Component\HttpFoundation\RedirectResponse;
  8. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  9. class SessionIdleHandler
  10. {
  11.     private RequestStack $requestStack;
  12.     private TokenStorageInterface $securityToken;
  13.     private RouterInterface $router;
  14.     private $maxIdleTime;
  15.     public function __construct($maxIdleTimeRequestStack $requestStackTokenStorageInterface $securityTokenRouterInterface $router)
  16.     {
  17.         $this->requestStack $requestStack;
  18.         $this->securityToken $securityToken;
  19.         $this->router $router;
  20.         $this->maxIdleTime $maxIdleTime;
  21.     }
  22.     public function onKernelRequest(RequestEvent $event)
  23.     {
  24.         if (HttpKernelInterface::MASTER_REQUEST != $event->getRequestType()) {
  25.             return;
  26.         }
  27.         if ($this->maxIdleTime 0) {
  28.             $session $this->requestStack->getSession();
  29.             $session->start();
  30.             $lapse time() - $session->getMetadataBag()->getLastUsed();
  31.             if ($lapse $this->maxIdleTime) {
  32.                 $this->securityToken->setToken(null);
  33.                 $event->setResponse(new RedirectResponse($this->router->generate('app_logout'))); // or whatever route you need
  34.             }
  35.         }
  36.     }
  37. }