Initial Kohana install
[speedfreak] / Server / system / libraries / drivers / Session / Cache.php
1 <?php defined('SYSPATH') OR die('No direct access allowed.');
2 /**
3  * Session cache driver.
4  *
5  * Cache library config goes in the session.storage config entry:
6  * $config['storage'] = array(
7  *     'driver' => 'apc',
8  *     'requests' => 10000
9  * );
10  * Lifetime does not need to be set as it is
11  * overridden by the session expiration setting.
12  *
13  * $Id: Cache.php 3769 2008-12-15 00:48:56Z zombor $
14  *
15  * @package    Core
16  * @author     Kohana Team
17  * @copyright  (c) 2007-2008 Kohana Team
18  * @license    http://kohanaphp.com/license.html
19  */
20 class Session_Cache_Driver implements Session_Driver {
21
22         protected $cache;
23         protected $encrypt;
24
25         public function __construct()
26         {
27                 // Load Encrypt library
28                 if (Kohana::config('session.encryption'))
29                 {
30                         $this->encrypt = new Encrypt;
31                 }
32
33                 Kohana::log('debug', 'Session Cache Driver Initialized');
34         }
35
36         public function open($path, $name)
37         {
38                 $config = Kohana::config('session.storage');
39
40                 if (empty($config))
41                 {
42                         // Load the default group
43                         $config = Kohana::config('cache.default');
44                 }
45                 elseif (is_string($config))
46                 {
47                         $name = $config;
48
49                         // Test the config group name
50                         if (($config = Kohana::config('cache.'.$config)) === NULL)
51                                 throw new Kohana_Exception('cache.undefined_group', $name);
52                 }
53
54                 $config['lifetime'] = (Kohana::config('session.expiration') == 0) ? 86400 : Kohana::config('session.expiration');
55                 $this->cache = new Cache($config);
56
57                 return is_object($this->cache);
58         }
59
60         public function close()
61         {
62                 return TRUE;
63         }
64
65         public function read($id)
66         {
67                 $id = 'session_'.$id;
68                 if ($data = $this->cache->get($id))
69                 {
70                         return Kohana::config('session.encryption') ? $this->encrypt->decode($data) : $data;
71                 }
72
73                 // Return value must be string, NOT a boolean
74                 return '';
75         }
76
77         public function write($id, $data)
78         {
79                 $id = 'session_'.$id;
80                 $data = Kohana::config('session.encryption') ? $this->encrypt->encode($data) : $data;
81
82                 return $this->cache->set($id, $data);
83         }
84
85         public function destroy($id)
86         {
87                 $id = 'session_'.$id;
88                 return $this->cache->delete($id);
89         }
90
91         public function regenerate()
92         {
93                 session_regenerate_id(TRUE);
94
95                 // Return new session id
96                 return session_id();
97         }
98
99         public function gc($maxlifetime)
100         {
101                 // Just return, caches are automatically cleaned up
102                 return TRUE;
103         }
104
105 } // End Session Cache Driver