src/Security/SessionIdleHandler.php line 45

Open in your IDE?
  1. <?php
  2. namespace App\Security;
  3. use Symfony\Component\HttpKernel\HttpKernelInterface;
  4. use Symfony\Component\HttpKernel\Event\RequestEvent;
  5. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  6. use Symfony\Component\Routing\RouterInterface;
  7. use Symfony\Component\HttpFoundation\RedirectResponse;
  8. use Symfony\Component\HttpFoundation\RequestStack;
  9. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  10. class SessionIdleHandler
  11. {
  12.     
  13.     protected $session;
  14.     protected $securityToken;
  15.     protected $router;
  16.     protected $maxIdleTime;
  17.     protected $requestStack;
  18.     
  19.     public function __construct($maxIdleTimeTokenStorageInterface $securityTokenRouterInterface $routerRequestStack $requestStack)
  20.     {
  21.         $this->requestStack $requestStack;
  22.         $this->session null
  23.         $this->securityToken $securityToken;
  24.         $this->router $router;
  25.         $this->maxIdleTime $maxIdleTime;
  26.     }
  27.     
  28.     public function onKernelRequest(RequestEvent $event)
  29.     {
  30.         if (HttpKernelInterface::MASTER_REQUEST != $event->getRequestType()) {
  31.             
  32.             return;
  33.         }
  34.         
  35.         if(is_null($this->session)) {
  36.             $this->session $this->requestStack->getSession();
  37.         }
  38.         
  39.         if ($this->maxIdleTime 0) {
  40.             
  41.             $this->session->start();
  42.             $lapse time() - $this->session->getMetadataBag()->getLastUsed();
  43.             
  44.             if ($lapse $this->maxIdleTime) {
  45.                 
  46.                 $this->securityToken->setToken(null);
  47.                 $this->session->getFlashBag()->set('info''You have been logged out due to inactivity.');
  48.                 
  49.                 // logout is defined in security.yaml.  See 'Logging Out' section here:
  50.                 // https://symfony.com/doc/4.1/security.html
  51.                 $event->setResponse(new RedirectResponse($this->router->generate('app_logout')));
  52.             }
  53.         }
  54.     }
  55. }