00001 <?php
00015 class Session_DB
00016 {
00017 var $db = null;
00018
00024 function Session_DB(&$db)
00025 {
00026 $this->db =& $db;
00027
00028 session_set_save_handler(
00029 array($this, 'open'),
00030 array($this, 'close'),
00031 array($this, 'read'),
00032 array($this, 'write'),
00033 array($this, 'destroy'),
00034 array($this, 'gc'));
00035 }
00036
00042 function close()
00043 {
00044 return true;
00045 }
00046
00053 function destroy($id)
00054 {
00055 $this->db->execute("DELETE FROM sessions WHERE id='%s'", array($id));
00056 return true;
00057 }
00058
00065 function gc($lifetime)
00066 {
00067 $t = time() - $lifetime;
00068 $this->db->execute("DELETE FROM sessions WHERE lastupdate<%i", array($t));
00069 return true;
00070 }
00071
00079 function open($path, $name)
00080 {
00081 return true;
00082 }
00083
00090 function read($id)
00091 {
00092 $data = $this->db->get_item("SELECT data FROM sessions WHERE id='%s'", array($id));
00093 if(!$data) {
00094 $this->db->execute("INSERT INTO sessions (id,lastupdate,data) VALUES ('%s',%i,'')", array($id,time()));
00095 return '';
00096 }
00097 return $data['data'];
00098 }
00099
00107 function write($id, $data)
00108 {
00109 $this->db->execute("UPDATE sessions SET data='%s',lastupdate=%i WHERE id='%s'", array($data,time(),$id));
00110 return true;
00111 }
00112
00113 }
00114
00128 function start_session($sess_id='')
00129 {
00130 if(session_id()) return;
00131 if($sess_id) session_id($sess_id);
00132 ini_set('session.use_trans_sid', 0);
00133 ini_set('session.use_cookies', 1);
00134 ini_set('session.use_only_cookies', 1);
00135 ini_set('session.cookie_lifetime', SESSION_LIFETIME);
00136 ini_set('session.gc_maxlifetime', SESSION_IDLETIME);
00137 ini_set('session.gc_probability', 10);
00138 ini_set('session.gc_divisor', 100);
00139 ini_set('session.name', SESSION_COOKIE);
00140 if(defined('SESSION_USEDB') && SESSION_USEDB === true) {
00141 $db =& Registry::get('pronto:db:main');
00142 $session = new Session_DB($db);
00143 Registry::set('pronto:session', $session);
00144 }
00145 if(isset($_COOKIE[SESSION_COOKIE]) && SESSION_LIFETIME > 0) {
00146
00147 setcookie(SESSION_COOKIE, $_COOKIE[SESSION_COOKIE], time()+SESSION_LIFETIME, "/");
00148 }
00149 session_name(SESSION_COOKIE);
00150 session_start();
00151 }
00152
00153 ?>