962a3878d9767a92e206ff40d1ffc4a7e6cb02bf
[yaffs-website] / vendor / symfony / http-foundation / Session / Storage / Handler / MemcacheSessionHandler.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\Handler;
13
14 /**
15  * MemcacheSessionHandler.
16  *
17  * @author Drak <drak@zikula.org>
18  */
19 class MemcacheSessionHandler implements \SessionHandlerInterface
20 {
21     /**
22      * @var \Memcache Memcache driver
23      */
24     private $memcache;
25
26     /**
27      * @var int Time to live in seconds
28      */
29     private $ttl;
30
31     /**
32      * @var string Key prefix for shared environments
33      */
34     private $prefix;
35
36     /**
37      * Constructor.
38      *
39      * List of available options:
40      *  * prefix: The prefix to use for the memcache keys in order to avoid collision
41      *  * expiretime: The time to live in seconds
42      *
43      * @param \Memcache $memcache A \Memcache instance
44      * @param array     $options  An associative array of Memcache options
45      *
46      * @throws \InvalidArgumentException When unsupported options are passed
47      */
48     public function __construct(\Memcache $memcache, array $options = array())
49     {
50         if ($diff = array_diff(array_keys($options), array('prefix', 'expiretime'))) {
51             throw new \InvalidArgumentException(sprintf(
52                 'The following options are not supported "%s"', implode(', ', $diff)
53             ));
54         }
55
56         $this->memcache = $memcache;
57         $this->ttl = isset($options['expiretime']) ? (int) $options['expiretime'] : 86400;
58         $this->prefix = isset($options['prefix']) ? $options['prefix'] : 'sf2s';
59     }
60
61     /**
62      * {@inheritdoc}
63      */
64     public function open($savePath, $sessionName)
65     {
66         return true;
67     }
68
69     /**
70      * {@inheritdoc}
71      */
72     public function close()
73     {
74         return true;
75     }
76
77     /**
78      * {@inheritdoc}
79      */
80     public function read($sessionId)
81     {
82         return $this->memcache->get($this->prefix.$sessionId) ?: '';
83     }
84
85     /**
86      * {@inheritdoc}
87      */
88     public function write($sessionId, $data)
89     {
90         return $this->memcache->set($this->prefix.$sessionId, $data, 0, time() + $this->ttl);
91     }
92
93     /**
94      * {@inheritdoc}
95      */
96     public function destroy($sessionId)
97     {
98         return $this->memcache->delete($this->prefix.$sessionId);
99     }
100
101     /**
102      * {@inheritdoc}
103      */
104     public function gc($maxlifetime)
105     {
106         // not required here because memcache will auto expire the records anyhow.
107         return true;
108     }
109
110     /**
111      * Return a Memcache instance.
112      *
113      * @return \Memcache
114      */
115     protected function getMemcache()
116     {
117         return $this->memcache;
118     }
119 }