// Yanked from p397 of "Beginning PHP5 and MySQL" with a number of modifications, bug fixes, and improvements function mysql_session_open(){ require("groundwork_db.php"); return true; } function mysql_session_close(){ mysql_session_garbage_collect(0); return true; } function mysql_session_select($SID){ $query = "SELECT value FROM sessions WHERE sid = '" . $SID . "'"; $result = mysql_query($query); if(!$result) return ''; if(mysql_num_rows($result)){ $row = mysql_fetch_assoc($result); $value = $row['value']; return $value; } else { return ''; } } function mysql_session_write($SID, $value){ $SID = addslashes($SID); $lifetime = get_cfg_var("session.gc_maxlifetime"); $expiration = time() + $lifetime; $query = "UPDATE sessions SET expiration = '" . $expiration . "', value = '" . $value . "' WHERE sid = '" . $SID . "'"; $result = mysql_query($query) or die(mysql_error()); if(!$result) return false; if(mysql_affected_rows()) return true; $query = "INSERT INTO sessions (sid,expiration,value,ip) VALUES('" . $SID . "','" . $expiration . "','" . $value . "','" . $_SERVER['REMOTE_ADDR'] . "')"; $result = mysql_query($query); if(!$result) return false; else return true; } function mysql_session_destroy($SID){ $query = "DELETE FROM sessions WHERE sid = '" . $SID . "'"; $result = mysql_query($query) or die(mysql_error()); } function mysql_session_garbage_collect($lifetime){ $lim = (time() - get_cfg_var("session.gc_maxlifetime")); $result = mysql_query("SELECT * FROM sessions WHERE expiration < " . $lim); /* while($myrow = mysql_fetch_array($result)){ $now = time(); $uid = $myrow['uid']; $ip = $myrow['ip']; $sid = $myrow['sid']; mysql_query("insert into log (time,uid,ip,class,data) values($now,$uid,'$ip','timeout',$sid)"); } */ $query = "DELETE FROM sessions WHERE expiration < " . $lim; $result = mysql_query($query) or die(mysql_error()); return mysql_affected_rows(); } session_set_save_handler("mysql_session_open","mysql_session_close","mysql_session_select","mysql_session_write","mysql_session_destroy","mysql_session_garbage_collect") or die("error"); ?>