Version 1
[yaffs-website] / vendor / symfony / http-foundation / Session / Storage / MetadataBag.php
1 <?php
2
3 /*
4  * This file is part of the Symfony package.
5  *
6  * (c) Fabien Potencier <fabien@symfony.com>
7  *
8  * For the full copyright and license information, please view the LICENSE
9  * file that was distributed with this source code.
10  */
11
12 namespace Symfony\Component\HttpFoundation\Session\Storage;
13
14 use Symfony\Component\HttpFoundation\Session\SessionBagInterface;
15
16 /**
17  * Metadata container.
18  *
19  * Adds metadata to the session.
20  *
21  * @author Drak <drak@zikula.org>
22  */
23 class MetadataBag implements SessionBagInterface
24 {
25     const CREATED = 'c';
26     const UPDATED = 'u';
27     const LIFETIME = 'l';
28
29     /**
30      * @var string
31      */
32     private $name = '__metadata';
33
34     /**
35      * @var string
36      */
37     private $storageKey;
38
39     /**
40      * @var array
41      */
42     protected $meta = array(self::CREATED => 0, self::UPDATED => 0, self::LIFETIME => 0);
43
44     /**
45      * Unix timestamp.
46      *
47      * @var int
48      */
49     private $lastUsed;
50
51     /**
52      * @var int
53      */
54     private $updateThreshold;
55
56     /**
57      * Constructor.
58      *
59      * @param string $storageKey      The key used to store bag in the session
60      * @param int    $updateThreshold The time to wait between two UPDATED updates
61      */
62     public function __construct($storageKey = '_sf2_meta', $updateThreshold = 0)
63     {
64         $this->storageKey = $storageKey;
65         $this->updateThreshold = $updateThreshold;
66     }
67
68     /**
69      * {@inheritdoc}
70      */
71     public function initialize(array &$array)
72     {
73         $this->meta = &$array;
74
75         if (isset($array[self::CREATED])) {
76             $this->lastUsed = $this->meta[self::UPDATED];
77
78             $timeStamp = time();
79             if ($timeStamp - $array[self::UPDATED] >= $this->updateThreshold) {
80                 $this->meta[self::UPDATED] = $timeStamp;
81             }
82         } else {
83             $this->stampCreated();
84         }
85     }
86
87     /**
88      * Gets the lifetime that the session cookie was set with.
89      *
90      * @return int
91      */
92     public function getLifetime()
93     {
94         return $this->meta[self::LIFETIME];
95     }
96
97     /**
98      * Stamps a new session's metadata.
99      *
100      * @param int $lifetime Sets the cookie lifetime for the session cookie. A null value
101      *                      will leave the system settings unchanged, 0 sets the cookie
102      *                      to expire with browser session. Time is in seconds, and is
103      *                      not a Unix timestamp.
104      */
105     public function stampNew($lifetime = null)
106     {
107         $this->stampCreated($lifetime);
108     }
109
110     /**
111      * {@inheritdoc}
112      */
113     public function getStorageKey()
114     {
115         return $this->storageKey;
116     }
117
118     /**
119      * Gets the created timestamp metadata.
120      *
121      * @return int Unix timestamp
122      */
123     public function getCreated()
124     {
125         return $this->meta[self::CREATED];
126     }
127
128     /**
129      * Gets the last used metadata.
130      *
131      * @return int Unix timestamp
132      */
133     public function getLastUsed()
134     {
135         return $this->lastUsed;
136     }
137
138     /**
139      * {@inheritdoc}
140      */
141     public function clear()
142     {
143         // nothing to do
144     }
145
146     /**
147      * {@inheritdoc}
148      */
149     public function getName()
150     {
151         return $this->name;
152     }
153
154     /**
155      * Sets name.
156      *
157      * @param string $name
158      */
159     public function setName($name)
160     {
161         $this->name = $name;
162     }
163
164     private function stampCreated($lifetime = null)
165     {
166         $timeStamp = time();
167         $this->meta[self::CREATED] = $this->meta[self::UPDATED] = $this->lastUsed = $timeStamp;
168         $this->meta[self::LIFETIME] = (null === $lifetime) ? ini_get('session.cookie_lifetime') : $lifetime;
169     }
170 }