1: <?php
2:
3: 4: 5: 6: 7: 8: 9: 10:
11:
12: namespace Symfony\Component\HttpFoundation\Session\Storage\Handler;
13:
14: 15: 16: 17: 18:
19: class MemcacheSessionHandler implements \SessionHandlerInterface
20: {
21: 22: 23:
24: private $memcache;
25:
26: 27: 28:
29: private $ttl;
30:
31: 32: 33:
34: private $prefix;
35:
36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 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: 63:
64: public function open($savePath, $sessionName)
65: {
66: return true;
67: }
68:
69: 70: 71:
72: public function close()
73: {
74: return $this->memcache->close();
75: }
76:
77: 78: 79:
80: public function read($sessionId)
81: {
82: return $this->memcache->get($this->prefix.$sessionId) ?: '';
83: }
84:
85: 86: 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: 95:
96: public function destroy($sessionId)
97: {
98: return $this->memcache->delete($this->prefix.$sessionId);
99: }
100:
101: 102: 103:
104: public function gc($lifetime)
105: {
106:
107: return true;
108: }
109: }
110: