diff --git a/core/core.services.yml b/core/core.services.yml index 4d8cf79..aadc0ed 100644 --- a/core/core.services.yml +++ b/core/core.services.yml @@ -1044,6 +1044,11 @@ services: session.attribute_bag: class: Symfony\Component\HttpFoundation\Session\Attribute\AttributeBag public: false + session.subrequest_session_subscrber: + class: Drupal\Core\EventSubscriber\SubRequestSessionSubscriber + public: false + tags: + - { name: event_subscriber } session_manager: class: Drupal\Core\Session\SessionManager arguments: ['@request_stack', '@database', '@session_manager.metadata_bag', '@settings'] diff --git a/core/includes/install.core.inc b/core/includes/install.core.inc index 75672f1..f75820e 100644 --- a/core/includes/install.core.inc +++ b/core/includes/install.core.inc @@ -439,6 +439,7 @@ function install_begin_request($class_loader, &$install_state) { } // Load all modules and perform request related initialization. + // @see \Drupal\Core\DrupalKernel::prepareLegacyRequest $kernel->preHandle($request); $request->attributes->set(RouteObjectInterface::ROUTE_OBJECT, new Route('')); $request->attributes->set(RouteObjectInterface::ROUTE_NAME, ''); diff --git a/core/lib/Drupal/Core/EventSubscriber/DefaultExceptionHtmlSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/DefaultExceptionHtmlSubscriber.php index 154c697..389cc19 100644 --- a/core/lib/Drupal/Core/EventSubscriber/DefaultExceptionHtmlSubscriber.php +++ b/core/lib/Drupal/Core/EventSubscriber/DefaultExceptionHtmlSubscriber.php @@ -111,11 +111,6 @@ protected function makeSubrequest(GetResponseForExceptionEvent $event, $path, $s // Persist the 'exception' attribute to the subrequest. $sub_request->attributes->set('exception', $request->attributes->get('exception')); - // Carry over the session to the subrequest. - if ($session = $request->getSession()) { - $sub_request->setSession($session); - } - $response = $this->httpKernel->handle($sub_request, HttpKernelInterface::SUB_REQUEST); $response->setStatusCode($status_code); $event->setResponse($response); diff --git a/core/lib/Drupal/Core/EventSubscriber/SubRequestSessionSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/SubRequestSessionSubscriber.php new file mode 100644 index 0000000..7464618 --- /dev/null +++ b/core/lib/Drupal/Core/EventSubscriber/SubRequestSessionSubscriber.php @@ -0,0 +1,66 @@ +requestStack = $request_stack; + } + + /** + * If the request is a sub-request, ensures session is copied from master. + * + * @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $event + * The request event. + */ + public function onRequest(GetResponseEvent $event) { + if ($event->getRequestType() == HttpKernelInterface::SUB_REQUEST) { + $parent = $this->requestStack->getParentRequest(); + if ($parent->hasSession()) { + $request = $event->getRequest(); + $request->setSession($parent->getSession()); + } + } + } + + /** + * {@inheritdoc} + */ + public static function getSubscribedEvents() { + $events[KernelEvents::REQUEST][] = ['onRequest', 50]; + return $events; + } +} diff --git a/core/modules/comment/src/Controller/CommentController.php b/core/modules/comment/src/Controller/CommentController.php index b2846be..4af3f05 100644 --- a/core/modules/comment/src/Controller/CommentController.php +++ b/core/modules/comment/src/Controller/CommentController.php @@ -130,10 +130,6 @@ public function commentPermalink(Request $request, CommentInterface $comment) { // @todo: Cleaner sub request handling. $redirect_request = Request::create($entity->getSystemPath(), 'GET', $request->query->all(), $request->cookies->all(), array(), $request->server->all()); $redirect_request->query->set('page', $page); - // Carry over the session to the subrequest. - if ($session = $request->getSession()) { - $redirect_request->setSession($session); - } // @todo: Convert the pager to use the request object. $request->query->set('page', $page); return $this->httpKernel->handle($redirect_request, HttpKernelInterface::SUB_REQUEST);