src/Security/SessionIdleHandler.php line 50

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