123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- <?php
- namespace Drupal\Core\StackMiddleware;
- use Symfony\Component\DependencyInjection\ContainerAwareTrait;
- use Symfony\Component\HttpFoundation\Request;
- use Symfony\Component\HttpKernel\HttpKernelInterface;
- /**
- * Wrap session logic around a HTTP request.
- *
- * Note, the session service is not injected into this class in order to prevent
- * premature initialization of session storage (database). Instead the session
- * service is retrieved from the container only when handling the request.
- */
- class Session implements HttpKernelInterface {
- use ContainerAwareTrait;
- /**
- * The wrapped HTTP kernel.
- *
- * @var \Symfony\Component\HttpKernel\HttpKernelInterface
- */
- protected $httpKernel;
- /**
- * The session service name.
- *
- * @var string
- */
- protected $sessionServiceName;
- /**
- * Constructs a Session stack middleware object.
- *
- * @param \Symfony\Component\HttpKernel\HttpKernelInterface $http_kernel
- * The decorated kernel.
- * @param string $service_name
- * The name of the session service, defaults to "session".
- */
- public function __construct(HttpKernelInterface $http_kernel, $service_name = 'session') {
- $this->httpKernel = $http_kernel;
- $this->sessionServiceName = $service_name;
- }
- /**
- * {@inheritdoc}
- */
- public function handle(Request $request, $type = self::MASTER_REQUEST, $catch = TRUE) {
- if ($type === self::MASTER_REQUEST && PHP_SAPI !== 'cli') {
- $session = $this->container->get($this->sessionServiceName);
- $session->start();
- $request->setSession($session);
- }
- $result = $this->httpKernel->handle($request, $type, $catch);
- if ($type === self::MASTER_REQUEST && $request->hasSession()) {
- $request->getSession()->save();
- }
- return $result;
- }
- }
|