diff --git a/core/lib/Drupal/Core/DrupalKernel.php b/core/lib/Drupal/Core/DrupalKernel.php index 0fc013f..49394c8 100644 --- a/core/lib/Drupal/Core/DrupalKernel.php +++ b/core/lib/Drupal/Core/DrupalKernel.php @@ -1015,19 +1015,16 @@ protected function restoreServiceState(ContainerInterface $container) { } // Restore request stack and request context. + $requests = []; if ($this->container->initialized('request_stack')) { - $requests = []; - $request_stack = clone $this->container->get('request_stack'); - while ($request = $request_stack->pop()) { - $requests[] = $request; + $original_request_stack = $this->container->get('request_stack'); + while ($request = $original_request_stack->pop()) { + array_unshift($requests, $request); } // Rebuild the request stack bottom up. - foreach (array_reverse($requests) as $request) { - // Refresh the session on the request if necessary. - if ($request->hasSession()) { - $request->setSession($container->get('session')); - } + foreach ($requests as $request) { + $original_request_stack->push($request); $container->get('request_stack')->push($request); $container->get('router.request_context')->fromRequest($request); } @@ -1038,11 +1035,17 @@ protected function restoreServiceState(ContainerInterface $container) { $session = $this->container->get('session'); if ($session->isStarted()) { $session->save(); - $container->get('session')->start(); } } + // Refresh references to the session on all requests. + foreach ($requests as $request) { + if ($request->hasSession()) { + $request->setSession($container->get('session')); + } + } + // Save the id of the currently logged in user. if ($this->container->initialized('current_user')) { $current_user_id = $this->container->get('current_user')->id();