src/EventSubscriber/SessionTimeoutSubscriber.php line 38
<?phpnamespace App\EventSubscriber;use Symfony\Component\EventDispatcher\EventSubscriberInterface;use Symfony\Component\HttpKernel\Event\RequestEvent;use Symfony\Component\Security\Core\Security;use Symfony\Component\HttpFoundation\RedirectResponse;use Symfony\Component\Routing\RouterInterface;use Psr\Log\LoggerInterface;class SessionTimeoutSubscriber implements EventSubscriberInterface{private const TIMEOUT = 3600;public function __construct(private Security $security,private RouterInterface $router,private LoggerInterface $logger) {}public function onKernelRequest(RequestEvent $event): void{$request = $event->getRequest();if (!$request->hasSession()) {return;}$session = $request->getSession();$now = time();if (!$session->has('last_activity')) {$session->set('last_activity', $now);return;}$lastActivity = $session->get('last_activity');$elapsed = $now - $lastActivity;$currentRoute = $request->attributes->get('_route');if ($elapsed > self::TIMEOUT) {if ($currentRoute === 'session_timeout_controller') {return;}$response = new RedirectResponse($this->router->generate('session_timeout_controller'));$event->setResponse($response);return;}$ignoredRoutes = ['_wdt', '_profiler', '_profiler_toolbar', '_profiler_search', '_profiler_search_bar', '_profiler_phpinfo'];if (!in_array($currentRoute, $ignoredRoutes, true)) {$session->set('last_activity', $now);}}public static function getSubscribedEvents(): array{return [RequestEvent::class => ['onKernelRequest', 0],];}}