Subversion Repositories php-qbpwcf

Rev

Details | Last modification | View Log | RSS feed

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