comparison core/lib/Drupal/Core/StackMiddleware/Session.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:4c8ae668cc8c
1 <?php
2
3 namespace Drupal\Core\StackMiddleware;
4
5 use Symfony\Component\DependencyInjection\ContainerAwareTrait;
6 use Symfony\Component\HttpFoundation\Request;
7 use Symfony\Component\HttpKernel\HttpKernelInterface;
8
9 /**
10 * Wrap session logic around a HTTP request.
11 *
12 * Note, the session service is not injected into this class in order to prevent
13 * premature initialization of session storage (database). Instead the session
14 * service is retrieved from the container only when handling the request.
15 */
16 class Session implements HttpKernelInterface {
17
18 use ContainerAwareTrait;
19
20 /**
21 * The wrapped HTTP kernel.
22 *
23 * @var \Symfony\Component\HttpKernel\HttpKernelInterface
24 */
25 protected $httpKernel;
26
27 /**
28 * The session service name.
29 *
30 * @var string
31 */
32 protected $sessionServiceName;
33
34 /**
35 * Constructs a Session stack middleware object.
36 *
37 * @param \Symfony\Component\HttpKernel\HttpKernelInterface $http_kernel
38 * The decorated kernel.
39 * @param string $service_name
40 * The name of the session service, defaults to "session".
41 */
42 public function __construct(HttpKernelInterface $http_kernel, $service_name = 'session') {
43 $this->httpKernel = $http_kernel;
44 $this->sessionServiceName = $service_name;
45 }
46
47 /**
48 * {@inheritdoc}
49 */
50 public function handle(Request $request, $type = self::MASTER_REQUEST, $catch = TRUE) {
51 if ($type === self::MASTER_REQUEST && PHP_SAPI !== 'cli') {
52 $session = $this->container->get($this->sessionServiceName);
53 $session->start();
54 $request->setSession($session);
55 }
56
57 $result = $this->httpKernel->handle($request, $type, $catch);
58
59 if ($type === self::MASTER_REQUEST && $request->hasSession()) {
60 $request->getSession()->save();
61 }
62
63 return $result;
64 }
65
66 }