Chris@14
|
1 <?php
|
Chris@14
|
2
|
Chris@14
|
3 /*
|
Chris@14
|
4 * This file is part of the Symfony package.
|
Chris@14
|
5 *
|
Chris@14
|
6 * (c) Fabien Potencier <fabien@symfony.com>
|
Chris@14
|
7 *
|
Chris@14
|
8 * For the full copyright and license information, please view the LICENSE
|
Chris@14
|
9 * file that was distributed with this source code.
|
Chris@14
|
10 */
|
Chris@14
|
11
|
Chris@14
|
12 namespace Symfony\Component\HttpFoundation\Session\Storage\Handler;
|
Chris@14
|
13
|
Chris@14
|
14 /**
|
Chris@14
|
15 * Adds basic `SessionUpdateTimestampHandlerInterface` behaviors to another `SessionHandlerInterface`.
|
Chris@14
|
16 *
|
Chris@14
|
17 * @author Nicolas Grekas <p@tchwork.com>
|
Chris@14
|
18 */
|
Chris@14
|
19 class StrictSessionHandler extends AbstractSessionHandler
|
Chris@14
|
20 {
|
Chris@14
|
21 private $handler;
|
Chris@14
|
22 private $doDestroy;
|
Chris@14
|
23
|
Chris@14
|
24 public function __construct(\SessionHandlerInterface $handler)
|
Chris@14
|
25 {
|
Chris@14
|
26 if ($handler instanceof \SessionUpdateTimestampHandlerInterface) {
|
Chris@17
|
27 throw new \LogicException(sprintf('"%s" is already an instance of "SessionUpdateTimestampHandlerInterface", you cannot wrap it with "%s".', \get_class($handler), self::class));
|
Chris@14
|
28 }
|
Chris@14
|
29
|
Chris@14
|
30 $this->handler = $handler;
|
Chris@14
|
31 }
|
Chris@14
|
32
|
Chris@14
|
33 /**
|
Chris@14
|
34 * {@inheritdoc}
|
Chris@14
|
35 */
|
Chris@14
|
36 public function open($savePath, $sessionName)
|
Chris@14
|
37 {
|
Chris@14
|
38 parent::open($savePath, $sessionName);
|
Chris@14
|
39
|
Chris@14
|
40 return $this->handler->open($savePath, $sessionName);
|
Chris@14
|
41 }
|
Chris@14
|
42
|
Chris@14
|
43 /**
|
Chris@14
|
44 * {@inheritdoc}
|
Chris@14
|
45 */
|
Chris@14
|
46 protected function doRead($sessionId)
|
Chris@14
|
47 {
|
Chris@14
|
48 return $this->handler->read($sessionId);
|
Chris@14
|
49 }
|
Chris@14
|
50
|
Chris@14
|
51 /**
|
Chris@14
|
52 * {@inheritdoc}
|
Chris@14
|
53 */
|
Chris@14
|
54 public function updateTimestamp($sessionId, $data)
|
Chris@14
|
55 {
|
Chris@14
|
56 return $this->write($sessionId, $data);
|
Chris@14
|
57 }
|
Chris@14
|
58
|
Chris@14
|
59 /**
|
Chris@14
|
60 * {@inheritdoc}
|
Chris@14
|
61 */
|
Chris@14
|
62 protected function doWrite($sessionId, $data)
|
Chris@14
|
63 {
|
Chris@14
|
64 return $this->handler->write($sessionId, $data);
|
Chris@14
|
65 }
|
Chris@14
|
66
|
Chris@14
|
67 /**
|
Chris@14
|
68 * {@inheritdoc}
|
Chris@14
|
69 */
|
Chris@14
|
70 public function destroy($sessionId)
|
Chris@14
|
71 {
|
Chris@14
|
72 $this->doDestroy = true;
|
Chris@14
|
73 $destroyed = parent::destroy($sessionId);
|
Chris@14
|
74
|
Chris@14
|
75 return $this->doDestroy ? $this->doDestroy($sessionId) : $destroyed;
|
Chris@14
|
76 }
|
Chris@14
|
77
|
Chris@14
|
78 /**
|
Chris@14
|
79 * {@inheritdoc}
|
Chris@14
|
80 */
|
Chris@14
|
81 protected function doDestroy($sessionId)
|
Chris@14
|
82 {
|
Chris@14
|
83 $this->doDestroy = false;
|
Chris@14
|
84
|
Chris@14
|
85 return $this->handler->destroy($sessionId);
|
Chris@14
|
86 }
|
Chris@14
|
87
|
Chris@14
|
88 /**
|
Chris@14
|
89 * {@inheritdoc}
|
Chris@14
|
90 */
|
Chris@14
|
91 public function close()
|
Chris@14
|
92 {
|
Chris@14
|
93 return $this->handler->close();
|
Chris@14
|
94 }
|
Chris@14
|
95
|
Chris@14
|
96 /**
|
Chris@14
|
97 * {@inheritdoc}
|
Chris@14
|
98 */
|
Chris@14
|
99 public function gc($maxlifetime)
|
Chris@14
|
100 {
|
Chris@14
|
101 return $this->handler->gc($maxlifetime);
|
Chris@14
|
102 }
|
Chris@14
|
103 }
|