<?php
/*
// sessioncookie : session management
//
// Original implementation by:
// Danny Heijl - Danny.Heijl@cevi.be, aug 1999
//
// Modified and enhanced by:
// Christoph Kassen - php@chkassen.de, nov 2000
// Download at www.chkassen.de
//
// Convert to use PostgreSQL, modify and enhanced by:
// Thomas Du - konga.geo@yahoo.com, Jan. 2000
//
// USE THIS SOFTWARE AT YOUR OWN RISK
//
// --------------------------------------------------------------------
*/
class sessioncookie
{
var $sdata;
var $id;
var $dblink;
//Constructor
//Must be called before any output is generated
function sessioncookie () {
global $php_sessid;
//Disable caching
header ("Expires: Mon, 26 Jul 1999 05:00:00 GMT"); // Date in the past
header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // always modified
header ("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header ("Pragma: no-cache"); // HTTP/1.0
$this->id = $php_sessid;
$this->sdata = array();
$this->dblink = '';
}
//Name : connect2db
//Description: Opens a connection to the mySQL server and selects a DB
//Returns : -
//Parameter : -
function connect2db (){
$host = "localhost";
$port = "5432";
$db = "database";
$this->dblink = @pg_connect("dbname=$db host=$host port=$port") or die ("Could not connect to DB.\n");
}
//Name : start
//Description: Starts a new session or loads previously stored values for a session
//Returns : -
//Parameter : -
function start () {
if(!isset($this->id)) {
//no session id found
//generate a new one
srand ((double) microtime() * 1000000);
$this->id = md5(uniqid(rand()));
setcookie("php_sessid", $this->id, 0);
return;
} else {
//session id found
$query = "SELECT val FROM session WHERE sid='$this->id';";
$result = @pg_exec($this->dblink, $query);
$sessiondata = @pg_fetch_row($result, 0);
$rest = unserialize($sessiondata[0]);
while (@list($key, $val) = @each($rest)) {
$GLOBALS["$key"] = $val;
$this->sdata[$key] = $val;
}
}
}
//Name : register
//Description: Registers a session variable
//Returns : -
//Parameter : variablename
function register ($var) {
$this->sdata[$var] = $var;
}
//Name : unregister
//Description: Unregisters a session variable
//Returns : -
//Parameter : variablename
function unregister ($var) {
unset($this->sdata[$var]);
unset($GLOBALS["$var"]);
}
//Name : destroy
//Description: Stops a current session
//Returns : -
//Parameter : -
function destroy () {
while (@list($key, $val) = @each($this->sdata)) {
$this->unregister($key);
}
$this->sdata = array();
$this->save();
$this->id = '';
$php_sessid = '';
// closing database persistent connection
pg_close($this->dblink);
$this->dblink = '';
}
//Name : isregistered
//Description: Checks if a variable is registered in a session
//Returns : 1(true) or 0(false)
//Parameter : variablename
function isregistered ($name) {
return (isset($this->sdata[$name]) ? 1 : 0);
}
//Name : save
//Description: Saves the session array
//Returns : -
//Parameter : -
function save () {
for(@reset($this->sdata); $var = @key($this->sdata); @next($this->sdata)) {
$ts[$var] = $GLOBALS[$var];
}
$ts = serialize($ts);
$sqldate = date("YmdHis", time());
$query = "UPDATE session SET val='$ts', changed=$sqldate WHERE sid='$this->id';";
$result = @pg_exec($this->dblink, $query);
if(@pg_cmdtuples($result) == 0) {
$query = "INSERT INTO session (sid, val, changed) VALUES ('$this->id', '$ts', $sqldate);";
$result = @pg_exec($this->dblink, $query);
}
}
//Name : gc
//Description: Deletes sessions older than the gctime value from the database
//Returns : -
//Parameter : Time in seconds
function gc ($gctime) {
$sqldate = date("YmdHis", time() - ($gctime * 60));
$query = "DELETE FROM session WHERE changed < '$sqldate';";
$result = @pg_exec($this->dblink, $query);
}
} //Class end \\
?>
|