PHP自定义Session

下面为session类的代码

<?php
class session
{
	static function init()
	{
		session_set_save_handler(
				array("session","open"),
				array("session","close"),
				array("session","read"),
				array("session","write"),
				array("session","destroy"),
				array("session","gc")
		);
	}
	
	static function open($save_path,$session_name)
	{
		echo "session opening!<br>";
		/*global $db,$REMOTE_ADDR;
		 $rs = $db->Execute("select * from Sessions where SessionID='".session_id()."'");
		$arry=$rs->FetchRow();
		if( $rs && $arry)
		{
		$db->Execute("update Sessions set SessionLast=NOW() where SessionID='".session_id()."'");
		}
		else
		{
		$query = "insert into Sessions set SessionID='".session_id()."',SessionName='$REMOTE_ADDR',SessionLast='NOW()'";
		//echo $query;
		$db->Execute($query);
		}*/
		return true;
	}
	static function close()
	{
		return(true);
	}
	
	static function read($id)
	{
		echo "session reading now!<br>";
		global $db;
		return true;
		$timenow = strftime("%Y-%m-%d %H:%M:%S", time());
		$query = "select SessionData from Sessions where SessionID='$id' and SessionLast > '$timenow'";
		$rs = $db->Execute($query);
		if(list($SessionData) = $rs->FetchRow())
		{
			//echo $SessionData;
			return $SessionData;
		}
		else
		{
			return false;
		}
	}
	
	static function write($id,$sess_data)
	{
		echo "session writing now!<br>";
		global $db;
		$rs = $db->Execute("select SessionID from Sessions where SessionID='$id'");
		$num = $rs->RecordCount();
		$unix_time = time()+MY_SESS_TIME;
		//echo MY_SESS_TIME;
		$dateleft = strftime("%Y-%m-%d %H:%M:%S", $unix_time);
		if($num <= 0)
		{
			$sql = "insert into Sessions set SessionData='$sess_data', SessionName='".$_SERVER["REMOTE_ADDR"]."', SessionLast='$dateleft', SessionID='".session_id()."'";
		}
		else
		{
			$sql = "update Sessions set SessionData='$sess_data', SessionName='".$_SERVER["REMOTE_ADDR"]."', SessionLast='$dateleft' where SessionID='$id'";
		}
		$db->Execute($sql);
	}
	
	static function destroy($id)
	{
		echo "session destroying now!<br>";
		global $db;
		$sql = "DELETE FROM Sessions WHERE `SessionID` = '$id'";
		$rs = $db->Execute($sql);
		return $rs;
		// $sess_file = "$sess_save_path/sess_$id";
		//return(@unlink($sess_file));
	}
	
	/*********************************************
	 * WARNING - You will need to implement some *
	* sort of garbage collection routine here. *
	*********************************************/
	static function gc($maxlifetime)
	{
		echo "session maxlifetime now!<br>";
		global $db;
		$timenow = strftime("%Y-%m-%d %H:%M:%S", time());
		$sql = "DELETE FROM `$table_sessions` WHERE `SessionLast` < '$timenow'";
		return $sess_db->Execute($sql);
		//echo "now gc!<br>";
		return true;
	}
	// proceed to use sessions normally
}

使用方法

include("session.class.php"); 
session::init(); 
session_start(); 
define("MY_SESS_TIME", 3600); //SESSION 生存时长 
$_SESSION["test"] = "abcdef";




你可能感兴趣的:(PHP,session)