Can't find cookie for validation in EventSubscriber
Some ideas:

Like for the config you have to add a cache dependency for the cookie, too:

  $response-&gt;getCacheableMetadata()-&gt;addCacheContexts(['cookies:' . $config_cookie]);


Or use an uncacheable RedirectResponse to simplify things.

And try to set a priority for the event subscriber, for example 31, because your code depends only on routing, which has 32:

  $events[KernelEvents::REQUEST][] = ['modifyIntercept', 31];


You don't need to get a response in an request subscriber, because there isn't one yet. Get the request instead and make sure that you are in a master request. So this would be how the subscriber starts most times:

  public function onKernelRequest(GetResponseEvent $event) {
    if (!$event-&gt;isMasterRequest()) {
      return;
    }
    $request = $event-&gt;getRequest();
    ...




Simplifying a bit more and using dummy values for testing:

  public function onKernelRequest(GetResponseEvent $event) {
    if (!$event-&gt;isMasterRequest()) {
      return;
    }
    $route_match = \Drupal::routeMatch();
    if (!$route_match-&gt;getRouteName() == 'entity.node.canonical') {
      return;
    }
    $request = $event-&gt;getRequest();
    if ($route_match-&gt;getRawParameter('node') == '1') {
      \Drupal::service('page_cache_kill_switch')-&gt;trigger();
      if (!$request-&gt;cookies-&gt;has('foo')) {
        $redirect = new RedirectResponse($request-&gt;getBasePath() . '/node/2', 302);
        $redirect-&gt;headers-&gt;setCookie(new Cookie('foo', '123', '+30 seconds'));
        $event-&gt;setResponse($redirect);
      }
    }
  }


This is working on my local dev environment.



Complete code (including dependency injection):

/src/EventSubscriber/MymoduleSubscriber.php

&lt;?php

namespace Drupal\mymodule\EventSubscriber;

use Drupal\Core\Routing\RouteMatchInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Cookie;

/**
 * mymodule event subscriber.
 */
class MymoduleSubscriber implements EventSubscriberInterface {

  /**
   * The route match.
   *
   * @var \Drupal\Core\Routing\RouteMatchInterface
   */
  protected $routeMatch;

  /**
   * Constructs event subscriber.
   *
   * @param \Drupal\Core\Routing\RouteMatchInterface $route_match
   *   The route match.
   */
  public function __construct(RouteMatchInterface $route_match) {
    $this-&gt;routeMatch = $route_match;
  }

  /**
   * Kernel request event handler.
   *
   * @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $event
   *   Response event.
   */
  public function onKernelRequest(GetResponseEvent $event) {
    if (!$event-&gt;isMasterRequest()) {
      return;
    }
    if (!$this-&gt;routeMatch-&gt;getRouteName() == 'entity.node.canonical') {
      return;
    }
    $request = $event-&gt;getRequest();
    if ($this-&gt;routeMatch-&gt;getRawParameter('node') == '1') {
      \Drupal::service('page_cache_kill_switch')-&gt;trigger();
      if (!$request-&gt;cookies-&gt;has('foo')) {
        $redirect = new RedirectResponse($request-&gt;getBasePath() .'/node/2', 302);
        $redirect-&gt;headers-&gt;setCookie(new Cookie('foo', '123', '+30 seconds'));
        $event-&gt;setResponse($redirect);
      }
    }
  }

  /**
   * {@inheritdoc}
   */
  public static function getSubscribedEvents() {
    return [
      KernelEvents::REQUEST =&gt; ['onKernelRequest', 31],
    ];
  }

}


mymodule.services.yml

services:
  mymodule.event_subscriber:
    class: Drupal\mymodule\EventSubscriber\MymoduleSubscriber
    arguments: ['@current_route_match']
    tags:
      - { name: event_subscriber }