PHP 实现多服务器共享 SESSION 数据

下面为session类的代码复制代码 代码如下:";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;if = $rs->FetchRow{//echo $SessionData;return $SessionData;}else{return false;}}static function write{echo "session writing now!
";global $db;$rs = $db->Execute("select SessionID from Sessions where SessionID='$id'");$num = $rs->RecordCount+MY_SESS_TIME;//echo MY_SESS_TIME;$dateleft = strftime("%Y-%m-%d %H:%M:%S", $unix_time);if{$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;}static function destroy{echo "session destroying now!
";global $db;$sql = "DELETE FROM Sessions WHERE `SessionID` = '$id'";$rs = $db->Execute;return $rs;// $sess_file = "$sess_save_path/sess_$id";//return;}/********************************************* * WARNING - You will need to implement some ** sort of garbage collection routine here. **********************************************/static function gc{echo "session maxlifetime now!
";global $db;$timenow = strftime("%Y-%m-%d %H:%M:%S", time;$sql = "DELETE FROM `$table_sessions` WHERE `SessionLast` < '$timenow'";return $sess_db->Execute;//echo "now gc!
";return true;}// proceed to use sessions normally}

`sesskey` varchar(32) NOT NULL default ”,

使用方法复制代码 代码如下:include; session::init; define; //SESSION 生存时长 $_SESSION["test"] = "abcdef";

CREATE TABLE `sess` (

$sql = ‘DELETE FROM sess WHERE expiry< ‘ . time();
$MY_SESS_CONN->Execute($sql);
//由于经常性的对表 sess 做删除操作,容易产生碎片,
//所以在垃圾回收中对该表进行优化操作。
$sql = ‘OPTIMIZE TABLE sess‘;
$MY_SESS_CONN->Execute($sql);
return true;
} //end function
} ///:~
//使用 ADOdb 作为数据库抽象层。
require_once(‘adodb/adodb.inc.php‘);
//数据库配置项,可放入配置文件中(如:config.inc.php)。
$db_type = ‘mysql‘;
$db_host = ‘192.168.212.1‘;
$db_user = ‘sess_user‘;
$db_pass = ‘sess_pass‘;
$db_name = ‘sess_db‘;
//创建数据库连接,这是一个全局变量。
$GLOBALS['MY_SESS_CONN'] =& ADONewConnection($db_type);
$GLOBALS['MY_SESS_CONN']->Connect( $db_host, $db_user, $db_pass, $db_name);
//初始化 SESSION 设置,必须在 session_start() 之前运行!!
My_Sess::init();
?>

首先创建数据表,MySQL 的 SQL 语句如下:

$sql = ‘DELETE FROM sess WHERE sesskey=‘ . $MY_SESS_CONN->qstr($sesskey);
$rs =& $MY_SESS_CONN->Execute($sql);
return true;
} //end function
function gc($maxlifetime = null) {
global $MY_SESS_CONN;

//使用 COOKIE 保存 SESSION ID 的方式
ini_set(‘session.use_cookies‘, 1);
ini_set(‘session.cookie_path‘, ‘/‘);
//多主机共享保存 SESSION ID 的 COOKIE
ini_set(‘session.cookie_domain‘, $domain);

sesskey 为 SESSION ID,expiry 为 SESSION 过期时间,data 用于保存 SESSION 数据。

KEY `expiry` (`expiry`)

`expiry` bigint(20) NOT NULL default ‘0′,

//将 session.save_handler 设置为 user,而不是默认的 files
session_module_name(‘user‘);
//定义 SESSION 各项操作所对应的方法名:
session_set_save_handler(
array(‘My_Sess‘, ‘open‘), //对应于静态方法 My_Sess::open(),下同。
array(‘My_Sess‘, ‘close‘),
array(‘My_Sess‘, ‘read‘),
array(‘My_Sess‘, ‘write‘),
array(‘My_Sess‘, ‘destroy‘),
array(‘My_Sess‘, ‘gc‘)
);
} //end function
function open($save_path, $session_name) {
return true;
} //end function
function close() {
global $MY_SESS_CONN;

默认情况下 SESSION 数据是以文件方式保存,想要使用数据库方式保存,就必须重新定义 SESSION 各个操作的处理函数。PHP 提供了session_set_save_handle() 函数,可以用此函数自定义 SESSION 的处理过程,当然首先要先将 session.save_handler 改成 user,可在 PHP 中进行设置:

PRIMARY KEY (`sesskey`),

<?php
define(‘MY_SESS_TIME‘, 3600); //SESSION 生存时长
//类定义
class My_Sess
{
function init()
{
$domain = ‘.infor96.com‘;
//不使用 GET/POST 变量方式
ini_set(‘session.use_trans_sid‘, 0);
//设置垃圾回收最大生存时间
ini_set(‘session.gc_maxlifetime‘, MY_SESS_TIME);

本文由金沙官网线上发布于编程,转载请注明出处:PHP 实现多服务器共享 SESSION 数据

您可能还会对下面的文章感兴趣: