public function it_does_not_set_cookie_when_it_does_not(FilterResponseEvent $event)
 {
     $event->getRequestType()->willReturn(HttpKernelInterface::MASTER_REQUEST)->shouldBeCalled();
     $event->getRequest()->willReturn($this->unsecureRequest)->shouldBeCalled();
     $event->getResponse()->shouldNotBeCalled();
     $this->onKernelResponse($event);
 }
 /**
  * Process the _tags request attribute, which is set when using the Tag
  * annotation.
  *
  * - For a safe (GET or HEAD) request, the tags are set on the response.
  * - For a non-safe request, the tags will be invalidated.
  *
  * @param FilterResponseEvent $event
  */
 public function onKernelResponse(FilterResponseEvent $event)
 {
     $request = $event->getRequest();
     $response = $event->getResponse();
     $tags = array();
     // Only set cache tags or invalidate them if response is successful
     if ($response->isSuccessful()) {
         $tags = $this->getAnnotationTags($request);
     }
     $configuredTags = $this->matchRule($request, $response);
     if ($configuredTags) {
         $tags = array_merge($tags, $configuredTags['tags']);
         foreach ($configuredTags['expressions'] as $expression) {
             $tags[] = $this->evaluateTag($expression, $request);
         }
     }
     if ($request->isMethodSafe()) {
         $this->tagHandler->addTags($tags);
         if (HttpKernelInterface::MASTER_REQUEST === $event->getRequestType()) {
             // For safe requests (GET and HEAD), set cache tags on response
             $this->tagHandler->tagResponse($response);
         }
     } elseif (count($tags)) {
         // For non-safe methods, invalidate the tags
         $this->tagHandler->invalidateTags($tags);
     }
 }
 /**
  * Moves flash messages from the session to a cookie inside a Response Kernel listener.
  *
  * @param FilterResponseEvent $event
  */
 public function onKernelResponse(FilterResponseEvent $event)
 {
     if ($event->getRequestType() !== HttpKernel::MASTER_REQUEST) {
         return;
     }
     // Flash messages are stored in the session. If there is none, there
     // can't be any flash messages in it. $session->getFlashBag() would
     // create a session, we need to avoid that.
     if (!$this->session->isStarted()) {
         return;
     }
     $flashBag = $this->session->getFlashBag();
     $flashes = $flashBag->all();
     if (empty($flashes)) {
         return;
     }
     $response = $event->getResponse();
     $cookies = $response->headers->getCookies(ResponseHeaderBag::COOKIES_ARRAY);
     if (isset($cookies[$this->options['host']][$this->options['path']][$this->options['name']])) {
         $rawCookie = $cookies[$this->options['host']][$this->options['path']][$this->options['name']]->getValue();
         $flashes = array_merge($flashes, json_decode($rawCookie));
     }
     $cookie = new Cookie($this->options['name'], json_encode($flashes), 0, $this->options['path'], $this->options['host'], $this->options['secure'], false);
     $response->headers->setCookie($cookie);
 }
 /**
  * Filters the Response.
  *
  * @param FilterResponseEvent $event A FilterResponseEvent instance
  */
 public function onKernelResponse(FilterResponseEvent $event)
 {
     if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType() || null === $this->esi) {
         return;
     }
     $this->esi->addSurrogateControl($event->getResponse());
 }
 public function saveBasket(Event\FilterResponseEvent $event)
 {
     if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
         return false;
     }
     $order = $this->get('basket.order');
     $cookieName = $this->get('cfg')->basket->cookieName;
     $token = $this->get('request')->cookies->get($cookieName);
     // Skip if the order is empty
     if (count($order->items) < 1) {
         // If the cookie was in the request, delete it and clear the cookie
         if ($token) {
             $this->deleteBasket();
             $this->get('http.cookies')->add(new Cookie($cookieName, null, new \DateTime('-1 hour')));
         }
         return false;
     }
     // See if a basket already exists.
     $basket = $this->_services['order.basket.loader']->getByToken($token);
     // Update with current order details.
     if ($basket) {
         $basketID = $basket->basket_id;
         $this->_services['order.basket.edit']->update($basketID, $order);
     } else {
         // Create a new basket
         $basketID = $this->_services['order.basket.create']->create($order);
         $basket = $this->_services['order.basket.loader']->getByID($basketID);
     }
     // Create the cookie
     $token = $this->_services['order.basket.token']->generate($basketID, $basket->created_at);
     $cookieName = $this->_services['cfg']->basket->cookieName;
     $expire = new \DateTime('+' . $this->_services['cfg']->basket->cookieLength);
     $cookie = new Cookie($cookieName, $token, $expire);
     $this->_services['http.cookies']->add($cookie);
 }
 /**
  * Unwraps an enforced response.
  */
 public function onKernelResponse(FilterResponseEvent $event)
 {
     $response = $event->getResponse();
     if ($response instanceof EnforcedResponse && $event->getRequestType() === HttpKernelInterface::MASTER_REQUEST) {
         $event->setResponse($response->getResponse());
     }
 }
 /**
  * @param FilterResponseEvent $event
  */
 public function onCoreResponse(FilterResponseEvent $event)
 {
     if (HttpKernelInterface::MASTER_REQUEST === $event->getRequestType()) {
         $response = $event->getResponse();
         $response->headers->add(array("X-RequestId" => $this->requestId));
     }
 }
 public function onKernelResponse(FilterResponseEvent $event)
 {
     $request = $event->getRequest();
     if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
         return;
     }
     $response = $event->getResponse();
     if ($request->isXmlHttpRequest()) {
         $this->debugbar->sendDataInHeaders();
         return;
     }
     //        if ($response->isRedirection()
     //            OR !$response->headers->has('content-type')
     //            OR false === strpos($response->headers->get('content-type'), 'text/html')
     //        ) {
     //            if ($this->debugbar->hasStackedData()) {
     //                //esto es para que solo guarde la ultima
     //                $this->debugbar->getStackedData();
     //            }
     //            $this->debugbar->stackData();
     //
     //            return;
     //        }
     $base = $request->getBasePath() . '/debugbar/';
     $debugbarRenderer = $this->debugbar->getJavascriptRenderer($base);
     $this->injectScripts($response, $debugbarRenderer);
 }
Exemple #9
0
 public function onKernelResponse(FilterResponseEvent $event)
 {
     if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
         return;
     }
     $ssoSession = $this->container->getParameter('sso_session');
     $request = $this->container->get('request_stack')->getCurrentRequest();
     if (!$request->cookies->has($ssoSession)) {
         $id = sha1(uniqid('', true));
         $cookie = new Cookie($ssoSession, $id, 0, '/', '.ceten.fr');
         $event->getResponse()->headers->setCookie($cookie);
     } else {
         $id = $request->cookies->get($ssoSession);
     }
     $user = null;
     if (null !== ($token = $this->container->get('security.context')->getToken())) {
         $user = $token->getUser();
         if (!$user instanceof User) {
             $user = null;
         }
     }
     $em = $this->container->get('doctrine.orm.entity_manager');
     $session = $em->getRepository('CetenCetenBundle:Session')->findOneBy(array('name' => $id));
     if (!$session) {
         $session = new Session();
         $session->setName($id);
     }
     $session->setUser($user);
     if (!$session->getId()) {
         $em->persist($session);
     }
     $em->flush();
 }
 public function onKernelResponse(FilterResponseEvent $event)
 {
     if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
         return;
     }
     $request = $event->getRequest();
     $response = $event->getResponse();
     $options = $this->configurationResolver->getOptions($request);
     if (!$options) {
         return;
     }
     if ($options['allow_origin'] !== true) {
         $response->setVary('Origin', false);
     }
     if (!$this->checkOrigin($request, $options)) {
         return;
     }
     // add CORS response headers
     $response->headers->set('Access-Control-Allow-Origin', $request->headers->get('Origin'));
     if ($options['allow_credentials']) {
         $response->headers->set('Access-Control-Allow-Credentials', 'true');
     }
     if ($options['expose_headers']) {
         $response->headers->set('Access-Control-Expose-Headers', strtolower(implode(', ', $options['expose_headers'])));
     }
 }
 /**
  * @param FilterResponseEvent $event
  */
 public function onCoreResponse(FilterResponseEvent $event)
 {
     if (HttpKernelInterface::MASTER_REQUEST === $event->getRequestType()) {
         $this->profiler->stopProfiling();
         if ($this->profiling) {
             $timers = $this->profiler->getTimers();
             $requestTime = microtime(true) - $this->start;
             $timers['request'] = (int) ($requestTime * 1000);
             $counters = $this->profiler->getCounters();
             $counters['request'] = 1;
             if ($this->statsd) {
                 $sample = $this->sampling / 100;
                 $route = $event->getRequest()->attributes->get('_route');
                 foreach ($timers as $key => $value) {
                     $this->statsd->timing($key, $value, $sample);
                     if ($route) {
                         $this->statsd->timing("per_route.{$key}.{$route}", $value, $sample);
                     }
                 }
                 foreach ($counters as $key => $value) {
                     $this->statsd->updateStats($key, $value, $sample);
                     if ($route) {
                         $this->statsd->updateStats("per_route.{$key}.{$route}", $value, $sample);
                     }
                 }
             }
             if ($this->logger) {
                 $this->logger->log($event->getRequest(), $timers, $counters);
             }
         }
     }
 }
    public function onCoreResponse(FilterResponseEvent $event)
    {
        if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
            return;
        }

        $response = $event->getResponse();
        $request = $event->getRequest();

        if ($response->headers->has('X-Debug-Token') && $response->isRedirect() && $this->interceptRedirects) {
            // keep current flashes for one more request
            $request->getSession()->setFlashes($request->getSession()->getFlashes());

            $response->setContent(
                sprintf('<html><head></head><body><h1>This Request redirects to<br /><a href="%1$s">%1$s</a>.</h1><h4>The redirect was intercepted by the web debug toolbar to help debugging.<br/>For more information, see the "intercept-redirects" option of the Profiler.</h4></body></html>',
                $response->headers->get('Location'))
            );
            $response->setStatusCode(200);
            $response->headers->remove('Location');
        }

        if (!$response->headers->has('X-Debug-Token')
            || '3' === substr($response->getStatusCode(), 0, 1)
            || ($response->headers->has('Content-Type') && false === strpos($response->headers->get('Content-Type'), 'html'))
            || 'html' !== $request->getRequestFormat()
            || $request->isXmlHttpRequest()
        ) {
            return;
        }

        $this->injectToolbar($response);
    }
 public function onKernelResponse(FilterResponseEvent $event)
 {
     $response = $event->getResponse();
     if (null !== $response && $response instanceof PluginResponseInterface) {
         //when a route from a plugin is hit
         if (!$event->getRequest()->attributes->get('_jarves_is_plugin')) {
             //we accept only plugin routes.
             return;
         }
         $pageResponse = $this->pageStack->getPageResponse();
         /** @var $content Content */
         $content = $event->getRequest()->attributes->get('_content');
         //this is later used in ContentTypes\TypePlugin, so it won't execute
         //the same plugin again.
         $pageResponse->setPluginResponse($content->getId(), $response);
         if (HttpKernelInterface::MASTER_REQUEST === $event->getRequestType()) {
             //when this was a master request, we need to render the actual content of the page,
             //so HttpKernel can return a valid ready rendered response
             //if a plugin route has been successfully requested
             //we need to handle also the Jarves editor
             if ($this->editMode->isEditMode()) {
                 $this->editMode->registerEditor();
             }
             $pageResponse->renderContent();
         }
         //maintain the actual PageResponse
         $event->setResponse($pageResponse);
     }
 }
 /**
  * Handles the onKernelResponse event.
  *
  * @param FilterResponseEvent $event A FilterResponseEvent instance
  */
 public function onKernelResponse(FilterResponseEvent $event)
 {
     $master = HttpKernelInterface::MASTER_REQUEST === $event->getRequestType();
     if ($this->onlyMasterRequests && !$master) {
         return;
     }
     if ($this->onlyException && null === $this->exception) {
         return;
     }
     $exception = $this->exception;
     $this->exception = null;
     if (null !== $this->matcher && !$this->matcher->matches($event->getRequest())) {
         return;
     }
     if ($profile = $this->profiler->collect($event->getRequest(), $event->getResponse(), $exception)) {
         if ($master) {
             $this->profiler->saveProfile($profile);
             foreach ($this->children as $child) {
                 $child->setParent($profile);
                 $this->profiler->saveProfile($child);
             }
             $this->children = array();
         } else {
             $this->children[] = $profile;
         }
     }
 }
 public function onKernelResponse(FilterResponseEvent $event)
 {
     if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
         return;
     }
     $response = $event->getResponse();
     $request = $event->getRequest();
     // do not capture redirects or modify XML HTTP Requests
     if ($request->isXmlHttpRequest()) {
         return;
     }
     if ($response->headers->has('X-Debug-Token') && $response->isRedirect() && $this->interceptRedirects) {
         $session = $request->getSession();
         if ($session && $session->getFlashBag() instanceof AutoExpireFlashBag) {
             // keep current flashes for one more request if using AutoExpireFlashBag
             $session->getFlashBag()->setAll($session->getFlashBag()->peekAll());
         }
         $response->setContent($this->templating->render('WebProfilerBundle:Profiler:toolbar_redirect.html.twig', array('location' => $response->headers->get('Location'))));
         $response->setStatusCode(200);
         $response->headers->remove('Location');
     }
     if (self::DISABLED === $this->mode || !$response->headers->has('X-Debug-Token') || $response->isRedirection() || $response->headers->has('Content-Type') && false === strpos($response->headers->get('Content-Type'), 'html') || 'html' !== $request->getRequestFormat()) {
         return;
     }
     $this->injectToolbar($response);
 }
 /**
  * Triggers authentication clean up on response.
  *
  * @see \Drupal\Core\Authentication\AuthenticationProviderInterface::cleanup()
  */
 public function onRespond(FilterResponseEvent $event)
 {
     if ($event->getRequestType() == HttpKernelInterface::MASTER_REQUEST) {
         $request = $event->getRequest();
         $this->authenticationProvider->cleanup($request);
     }
 }
 /**
  * Process onReslonse event, updates user history information
  *
  * @param  FilterResponseEvent $event
  * @return bool|void
  */
 public function onResponse(FilterResponseEvent $event)
 {
     if (HttpKernel::MASTER_REQUEST != $event->getRequestType()) {
         // Do not do anything
         return;
     }
     $request = $event->getRequest();
     $response = $event->getResponse();
     // do not process requests other than in html format
     // with 200 OK status using GET method and not _internal and _wdt
     if (!$this->matchRequest($response, $request)) {
         return false;
     }
     $postArray = ['url' => $request->getRequestUri(), 'user' => $this->user];
     /** @var $historyItem  NavigationHistoryItem */
     $historyItem = $this->em->getRepository('Oro\\Bundle\\NavigationBundle\\Entity\\NavigationHistoryItem')->findOneBy($postArray);
     if (!$historyItem) {
         /** @var $historyItem \Oro\Bundle\NavigationBundle\Entity\NavigationItemInterface */
         $historyItem = $this->navItemFactory->createItem(NavigationHistoryItem::NAVIGATION_HISTORY_ITEM_TYPE, $postArray);
     }
     $historyItem->setTitle($this->titleService->getSerialized());
     // force update
     $historyItem->doUpdate();
     $this->em->persist($historyItem);
     $this->em->flush($historyItem);
     return true;
 }
 /**
  * Sets a cookie to the response containing the CRSF token.
  *
  * @param FilterResponseEvent $event
  */
 public function onKernelResponse(FilterResponseEvent $event)
 {
     if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType() || !$this->routeMatcher->match($event->getRequest(), $this->routes)) {
         return;
     }
     $event->getResponse()->headers->setCookie(new Cookie($this->cookieName, $this->angularCsrfTokenManager->getToken()->getValue(), $this->cookieExpire, $this->cookiePath, $this->cookieDomain, $this->cookieSecure, false));
 }
 public function onKernelResponse(FilterResponseEvent $event)
 {
     if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
         return;
     }
     $response = $event->getResponse();
     $request = $event->getRequest();
     // do not capture redirects or modify XML HTTP Requests
     if ($request->isXmlHttpRequest()) {
         return;
     }
     // do not capture admin cms urls
     if (preg_match('/.*\\/admin\\/.*/', $request->getRequestUri())) {
         return;
     }
     try {
         $isGranted = $this->authorizationChecker->isGranted('ROLE_ADMIN');
     } catch (AuthenticationCredentialsNotFoundException $e) {
         $isGranted = false;
     }
     if (self::DISABLED === $this->mode || $response->isRedirection() || $response->headers->has('Content-Type') && false === strpos($response->headers->get('Content-Type'), 'html') || 'html' !== $request->getRequestFormat()) {
         return;
     }
     $this->injectToolbar($response, $request);
 }
 public function onResponse(FilterResponseEvent $event)
 {
     if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
         return;
     }
     $response = $event->getResponse();
     $request = $event->getRequest();
     if (!$this->container->hasParameter('newscoop.gimme.allow_origin')) {
         return false;
     }
     $alowedHosts = $this->container->getParameter('newscoop.gimme.allow_origin');
     if (count($alowedHosts) == 0) {
         return false;
     }
     if (in_array('*', $alowedHosts)) {
         $response->headers->set('Access-Control-Allow-Origin', '*');
         $event->setResponse($response);
     } else {
         foreach ($alowedHosts as $host) {
             if ($request->server->get('HTTP_ORIGIN') == $host) {
                 $response->headers->set('Access-Control-Allow-Origin', $host);
                 $event->setResponse($response);
             }
         }
     }
 }
Exemple #21
0
 /**
  * Logs master response on event KernelEvents::RESPONSE
  *
  * @param FilterResponseEvent $event
  */
 public function onKernelResponse(FilterResponseEvent $event)
 {
     if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
         return;
     }
     $this->logResponse($event->getResponse());
 }
    public function onCoreResponse(FilterResponseEvent $event)
    {
        if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
            return;
        }

        $response = $event->getResponse();
        $request = $event->getRequest();

        // do not capture redirects or modify XML HTTP Requests
        if ($request->isXmlHttpRequest()) {
            return;
        }

        if ($response->headers->has('X-Debug-Token') && $response->isRedirect() && $this->interceptRedirects) {
            if (null !== $session = $request->getSession()) {
                // keep current flashes for one more request
                $session->setFlashes($session->getFlashes());
            }

            $response->setContent($this->templating->render('WebProfilerBundle:Profiler:toolbar_redirect.html.twig', array('location' => $response->headers->get('Location'))));
            $response->setStatusCode(200);
            $response->headers->remove('Location');
        }

        if (!$response->headers->has('X-Debug-Token')
            || '3' === substr($response->getStatusCode(), 0, 1)
            || ($response->headers->has('Content-Type') && false === strpos($response->headers->get('Content-Type'), 'html'))
            || 'html' !== $request->getRequestFormat()
        ) {
            return;
        }

        $this->injectToolbar($response);
    }
 /**
  * Filters the Response.
  *
  * @param FilterResponseEvent $event A FilterResponseEvent instance
  */
 public function onKernelResponse(FilterResponseEvent $event)
 {
     $request = $event->getRequest();
     $response = $event->getResponse();
     if ('HEAD' === $request->getMethod()) {
         // cf. RFC2616 14.13
         $length = $response->headers->get('Content-Length');
         $response->setContent('');
         if ($length) {
             $response->headers->set('Content-Length', $length);
         }
     }
     if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
         return;
     }
     if (null === $response->getCharset()) {
         $response->setCharset($this->charset);
     }
     if ($response->headers->has('Content-Type')) {
         return;
     }
     $format = $request->getRequestFormat();
     if (null !== $format && ($mimeType = $request->getMimeType($format))) {
         $response->headers->set('Content-Type', $mimeType);
     }
 }
 public function onKernelResponse(FilterResponseEvent $event)
 {
     return;
     // disabled theming for the time being while it gets refactored.
     if ($event->getRequestType() == HttpKernelInterface::MASTER_REQUEST) {
         $response = $event->getResponse();
         if ($request->isXmlHttpRequest()) {
             return;
         }
         if ($response instanceof RedirectResponse || $response instanceof PlainResponse || $response instanceof AbstractBaseResponse) {
             // dont theme redirects, plain responses or Ajax responses
             return;
         }
         $request = $event->getRequest();
         //            if (!$request->isXmlHttpRequest()
         //                && strpos($response->getContent(), '</body>') === false
         //                && !$response->isRedirection()
         //                && 'html' === $request->getRequestFormat()
         //                && (($response->headers->has('Content-Type') && false !== strpos($response->headers->get('Content-Type'), 'html')) || !$response->headers->has('Content-Type') )) {
         //                $content = $this->templating->render($this->activeTheme.'::master.html.twig', array('maincontent' => $response->getContent()));
         //                $response->setContent('ddd'.$content);
         //            }
         $content = $this->templating->render($this->activeTheme . '::master.html.twig', array('maincontent' => $response->getContent()));
         $response->setContent($content);
     }
 }
 public function onKernelResponse(FilterResponseEvent $event)
 {
     if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
         return;
     }
     $session = $event->getRequest()->getSession();
     $session->save();
 }
Exemple #26
0
    /**
     * Handles the onKernelResponse event.
     *
     * @param FilterResponseEvent $event A FilterResponseEvent instance
     */
    public function onKernelResponse(FilterResponseEvent $event)
    {
        $master = HttpKernelInterface::MASTER_REQUEST === $event->getRequestType();
        if ($this->onlyMasterRequests && !$master) {
            return;
        }

        if ($this->onlyException && null === $this->exception) {
            return;
        }

        $request = $event->getRequest();
        $exception = $this->exception;
        $this->exception = null;

        if (null !== $this->matcher && !$this->matcher->matches($request)) {
            return;
        }

        if (!$profile = $this->profiler->collect($request, $event->getResponse(), $exception)) {
            return;
        }

        $this->profiles[] = $profile;

        if (null !== $exception) {
            foreach ($this->profiles as $profile) {
                $this->profiler->saveProfile($profile);
            }

            return;
        }

        // keep the profile as the child of its parent
        if (!$master) {
            array_pop($this->requests);

            $parent = end($this->requests);

            // when simulating requests, we might not have the parent
            if ($parent) {
                $profiles = isset($this->children[$parent]) ? $this->children[$parent] : array();
                $profiles[] = $profile;
                $this->children[$parent] = $profiles;
            }
        }

        if (isset($this->children[$request])) {
            foreach ($this->children[$request] as $child) {
                $profile->addChild($child);
            }
            $this->children[$request] = array();
        }

        if ($master) {
            $this->saveProfiles($profile);
        }
    }
 public function onKernelResponse(FilterResponseEvent $event)
 {
     if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
         return;
     }
     $response = $event->getResponse();
     $response->headers->set('Access-Control-Allow-Origin', '*');
     $response->headers->set('Access-Control-Allow-Headers', 'accept, origin, x-requested-with, token, content-type');
 }
 /**
  * @param FilterResponseEvent $event
  */
 public function onKernelResponse(FilterResponseEvent $event)
 {
     if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
         return;
     }
     $response = $event->getResponse();
     $this->getPreflightResponse($event->getRequest(), $response);
     $event->setResponse($response);
 }
 public function onKernelResponse(FilterResponseEvent $event)
 {
     if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
         return;
     }
     $request = $event->getRequest();
     if (!$request->cookies->has('hl') || $request->cookies->get('hl') !== $request->getLocale()) {
         $event->getResponse()->headers->setCookie(new Cookie('hl', $request->getLocale(), time() + 86400 * 365));
     }
 }
 /**
  * Removes is_logged_in cookie if needed.
  *
  * @param FilterResponseEvent $e
  */
 public function onFilterResponse(FilterResponseEvent $e)
 {
     if ($e->getRequestType() !== HttpKernelInterface::MASTER_REQUEST) {
         return;
     }
     if ($this->needsCookieCleanup) {
         $e->getResponse()->headers->clearCookie('is_logged_in');
         $this->needsCookieCleanup = false;
     }
 }