I wrote the following class to store sessions in my database:The class writes sessions and reads them, but is not performing the garbage collection which is supposed to remove expired sessions. I thought it did this automatically but it is not working, does anyone know what my problem is? Thanks in advance,PHP Code:<?php
/**
* Project: Kayzio Framework
* File: Session/main.class.php
*
* @copyright 2007 Kayzio. All Rights Reserved.
* @author Matthew Dahl <dahl.matthew@gmail.com>
* @package Kayzio Framework
*/
/***********************************************************************************/
class SessionManager {
/*
* Database Type
*
* @var string
*/
var $dbType = "mysql";
/*
* Session Life Time
*
* @var int
*/
var $LifeTime;
/***********************************************************************************/
/*
* Session Manager
*/
function SessionManager() {
$this->LifeTime = get_cfg_var("session.gc_maxlifetime");
session_set_save_handler(
array(&$this, "Open"),
array(&$this, "Close"),
array(&$this, "Read"),
array(&$this, "Write"),
array(&$this, "Destroy"),
array(&$this, "GC")
);
}
/*
* Open Session
*
* @params string, string
*/
function Open($SavePath, $SessionName) {
global $sess_save_path;
$sess_save_path = $SavePath;
return true;
}
/*
* Close Session
*/
function Close() {
return true;
}
/*
* Read Session
*
* @param int
*/
function Read($ID) {
$Data = "";
$Time = time();
if (strtolower($this->dbType) == "mssql") {
$NewID = addslashes($ID);
$ReadSession = mssql_query("SELECT data FROM sessions WHERE id = '$NewID' AND expires > $Time");
$NumRows = mssql_num_rows($ReadSession);
if($NumRows > 0) {
$Row = mssql_fetch_assoc($ReadSession);
$Data = $Row['data'];
}
return $Data;
}
elseif (strtolower($this->dbType) == "mysqli") {
$NewID = mysqli_real_escape_string($ID);
$ReadSession = mysqli_query("SELECT data FROM sessions WHERE id = '$NewID' AND expires > $Time");
$NumRows = mysqli_num_rows($ReadSession);
if($NumRows > 0) {
$Row = mysqli_fetch_assoc($ReadSession);
$Data = $Row['data'];
}
return $Data;
}
elseif (strtolower($this->dbType) == "pgsql") {
$NewID = pg_escape_string($ID);
$ReadSession = pg_query("SELECT data FROM sessions WHERE id = '$NewID' AND expires > $Time");
$NumRows = pg_num_rows($ReadSession);
if($NumRows > 0) {
$Row = pg_fetch_assoc($ReadSession);
$Data = $Row['data'];
}
return $Data;
}
else {
$NewID = mysql_real_escape_string($ID);
$ReadSession = mysql_query("SELECT data FROM sessions WHERE id = '$NewID' AND expires > $Time");
$NumRows = mysql_num_rows($ReadSession);
if($NumRows > 0) {
$Row = mysql_fetch_assoc($ReadSession);
$Data = $Row['data'];
}
return $Data;
}
}
/*
* Write Session
*
* @params int, string
*/
function Write($ID, $Data) {
$Time = time() + $this->LifeTime;
if (strtolower($this->dbType) == "mssql") {
$NewID = addslashes($ID);
$NewData = addslashes($Data);
$DeleteOld = mssql_query("DELETE FROM sessions WHERE id = '$NewID'");
$WriteSession = mssql_query("INSERT INTO sessions (id, data, expires) VALUES ('$NewID', '$NewData', $Time)");
}
elseif (strtolower($this->dbType) == "mysqli") {
$NewID = mysqli_real_escape_string($ID);
$NewData = mysqli_real_escape_string($Data);
$DeleteOld = mysqli_query("DELETE FROM sessions WHERE id = '$NewID'");
$WriteSession = mysqli_query("INSERT INTO sessions (id, data, expires) VALUES ('$NewID', '$NewData', $Time)");
}
elseif (strtolower($this->dbType) == "pgsql") {
$NewID = pg_escape_string($ID);
$NewData = pg_escape_string($Data);
$DeleteOld = pg_query("DELETE FROM sessions WHERE id = '$NewID'");
$WriteSession = pg_query("INSERT INTO sessions (id, data, expires) VALUES ('$NewID', '$NewData', $Time)");
}
else {
$NewID = mysql_real_escape_string($ID);
$NewData = mysql_real_escape_string($Data);
$DeleteOld = mysql_query("DELETE FROM sessions WHERE id = '$NewID'");
$WriteSession = mysql_query("INSERT INTO sessions (id, data, expires) VALUES ('$NewID', '$NewData', $Time)");
}
return true;
}
/*
* Destroy Session
*
* @params int
*/
function Destroy($ID) {
if (strtolower($this->dbType) == "mssql") {
$NewID = addslashes($ID);
mssql_query("DELETE FROM sessions WHERE id = '$NewID'");
}
elseif (strtolower($this->dbType) == "mysqli") {
$NewID = mysqli_real_escape_string($ID);
mysqli_query("DELETE FROM sessions WHERE id = '$NewID'");
}
elseif (strtolower($this->dbType) == "pgsql") {
$NewID = pg_escape_string($ID);
pg_query("DELETE FROM sessions WHERE id = '$NewID'");
}
else {
$NewID = mysql_real_escape_string($ID);
mysql_query("DELETE FROM sessions WHERE id = '$NewID'");
}
return true;
}
/*
* Garbage Collection
*/
function GC() {
$Time = time();
if (strtolower($this->dbType) == "mssql") {
mssql_query("DELETE FROM sessions WHERE expires < $Time");
}
elseif (strtolower($this->dbType) == "mysqli") {
mysqli_query("DELETE FROM sessions WHERE expires < $Time");
}
elseif (strtolower($this->dbType) == "pgsql") {
pg_query("DELETE FROM sessions WHERE expires < $Time");
}
else {
mysql_query("DELETE FROM sessions WHERE expires < $Time");
}
return true;
}
}
/***********************************************************************************/
?>
Matt





Bookmarks