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();
43:
44: /**
45: * Unix timestamp.
46: *
47: * @var integer
48: */
49: private $lastUsed;
50:
51: /**
52: * Constructor.
53: *
54: * @param string $storageKey The key used to store bag in the session.
55: */
56: public function __construct($storageKey = '_sf2_meta')
57: {
58: $this->storageKey = $storageKey;
59: $this->meta = array(self::CREATED => 0, self::UPDATED => 0, self::LIFETIME => 0);
60: }
61:
62: /**
63: * {@inheritdoc}
64: */
65: public function initialize(array &$array)
66: {
67: $this->meta = &$array;
68:
69: if (isset($array[self::CREATED])) {
70: $this->lastUsed = $this->meta[self::UPDATED];
71: $this->meta[self::UPDATED] = time();
72: } else {
73: $this->stampCreated();
74: }
75: }
76:
77: /**
78: * Gets the lifetime that the session cookie was set with.
79: *
80: * @return integer
81: */
82: public function getLifetime()
83: {
84: return $this->meta[self::LIFETIME];
85: }
86:
87: /**
88: * Stamps a new session's metadata.
89: *
90: * @param integer $lifetime Sets the cookie lifetime for the session cookie. A null value
91: * will leave the system settings unchanged, 0 sets the cookie
92: * to expire with browser session. Time is in seconds, and is
93: * not a Unix timestamp.
94: */
95: public function stampNew($lifetime = null)
96: {
97: $this->stampCreated($lifetime);
98: }
99:
100: /**
101: * {@inheritdoc}
102: */
103: public function getStorageKey()
104: {
105: return $this->storageKey;
106: }
107:
108: /**
109: * Gets the created timestamp metadata.
110: *
111: * @return integer Unix timestamp
112: */
113: public function getCreated()
114: {
115: return $this->meta[self::CREATED];
116: }
117:
118: /**
119: * Gets the last used metadata.
120: *
121: * @return integer Unix timestamp
122: */
123: public function getLastUsed()
124: {
125: return $this->lastUsed;
126: }
127:
128: /**
129: * {@inheritdoc}
130: */
131: public function clear()
132: {
133: // nothing to do
134: }
135:
136: /**
137: * {@inheritdoc}
138: */
139: public function getName()
140: {
141: return $this->name;
142: }
143:
144: /**
145: * Sets name.
146: *
147: * @param string $name
148: */
149: public function setName($name)
150: {
151: $this->name = $name;
152: }
153:
154: private function stampCreated($lifetime = null)
155: {
156: $timeStamp = time();
157: $this->meta[self::CREATED] = $this->meta[self::UPDATED] = $this->lastUsed = $timeStamp;
158: $this->meta[self::LIFETIME] = (null === $lifetime) ? ini_get('session.cookie_lifetime') : $lifetime;
159: }
160: }
161: