src/EventListener/SessionIdleHandler.php line 30

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use Symfony\Component\HttpFoundation\RedirectResponse;
  4. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  5. use Symfony\Component\HttpKernel\Event\RequestEvent;
  6. use Symfony\Component\HttpKernel\HttpKernelInterface;
  7. use Symfony\Component\Routing\RouterInterface;
  8. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  9. use Symfony\Contracts\Translation\TranslatorInterface;
  10. class SessionIdleHandler
  11. {
  12.     protected $session;
  13.     protected $securityToken;
  14.     protected $router;
  15.     protected $maxIdleTime;
  16.     protected $translator;
  17.     public function __construct(SessionInterface $sessionTokenStorageInterface $securityTokenRouterInterface $routerTranslatorInterface $translator$maxIdleTime)
  18.     {
  19.         $this->session $session;
  20.         $this->router $router;
  21.         $this->maxIdleTime $maxIdleTime;
  22.         $this->securityToken $securityToken;
  23.         $this->translator $translator;
  24.     }
  25.     public function onKernelRequest(RequestEvent $event)
  26.     {
  27.         date_default_timezone_set('Africa/Kampala');
  28.         if (HttpKernelInterface::MASTER_REQUEST != $event->getRequestType()) {
  29.             return;
  30.         }
  31.         if ($this->maxIdleTime 0) {
  32.             $this->session->start();
  33.             $lapse time() - $this->session->getMetadataBag()->getLastUsed();
  34.             if ($lapse $this->maxIdleTime) {
  35.                 $this->securityToken->setToken(null);
  36.                 $this->session->getFlashBag()->set('info'$this->translator->trans('login.session_timeout'));
  37.                 $event->setResponse(new RedirectResponse($this->router->generate('app_login')));
  38.             }
  39.         }
  40.     }
  41. }