<?php

# session.inc
#
# mysql session handlers
#
# copyright 2000 Alan van den Bosch
# <alan@sanguis.com.au>
#
# free to redistribute with this header intact, use at own risk.
#

if(!isset($SESSION_DB_LNK)){
	// global for database conection
	$SESSION_DB_LNK=0;

	function sesh_open($garbage,$sid){
		global $SESSION_DB_LNK;
		// establish db conection
		if(!$SESSION_DB_LNK){
			$SESSION_DB_LNK=@mysql_pconnect("localhost","root","") or die("cannot connect to session store");
			if($SESSION_DB_LNK == 0)return false;

			return mysql_select_db("sessions",$SESSION_DB_LNK) or die("cannot select session db");
		}
	}

	function sesh_close(){
		// just return true...
		return true;
	}

	function sesh_read($sid){
		global $SESSION_DB_LNK;

		if(!$SESSION_DB_LNK)return false;

		// set default session data to empty string
		$row['sdata']="";

		// read session data from table 
		$select="select sdata from session where sid='$sid'";
		$result=mysql_query($select,$SESSION_DB_LNK);

		if(mysql_num_rows($result) > 0)$row=mysql_fetch_array($result);
		return $row['sdata'];
	}

	function sesh_write($sid,$sdata){
		global $SESSION_DB_LNK;

		if(!$SESSION_DB_LNK)return false;

		// try to update row
		$update="update session set sdata='$sdata' where sid='$sid'";
		mysql_query($update,$SESSION_DB_LNK);

		// couldnt update, insert instead.
		if(mysql_affected_rows($SESSION_DB_LNK)==0){
			$insert="insert into session set sid='$sid', sdata='$sdata'";
			mysql_query($insert,$SESSION_DB_LNK);
		}
		return true;
	}

	function sesh_destroy($sid){
		global $SESSION_DB_LNK;

		if(!$SESSION_DB_LNK)return false;

		// remove the row from session table
		$delete="delete from session where sid='$sid'";
		mysql_query($delete,$SESSION_DB_LNK);

		if(mysql_affected_rows($SESSION_DB_LNK)==0)return false;

		return true;
	}

	function sesh_gc($maxlife){
		global $SESSION_DB_LNK;

		if(!$SESSION_DB_LNK)return false;

		// clean up old sessions
		$delete="delete from session where ";
		$delete.="ADDDATE( mtime, INTERVAL $maxlife SECOND ) < NOW()";
		mysql_query($delete,$SESSION_DB_LNK);

		return true;
	}

	session_set_save_handler("sesh_open",
				 "sesh_close",
				 "sesh_read",
				 "sesh_write",
				 "sesh_destroy",
				 "sesh_gc");

}


?>