多服务器session共享之mysql共享
本篇介绍:多服务器session共享之mysql共享。
多服务器session共享之mysql共享的方式大家普遍使用先用session_id()的方式生成一个ID,然后将用户的信息和这个ID写入数据库,实现共享。这样做的缺点是使用session_start()的时候还是会在服务器生成一个session文件,这样就造成无谓的服务器IO损耗。
可以使用php的session_set_save_handler的机制来实现,就是定义open, close, read, write, destroy, gc(回收)6个函数,然后设置session的保存函数句柄,在这些函数里实现数据库的读写即可。
数据库结构:
CREATE TABLE `test`.`sessions` (
`s_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`data` TEXT NOT NULL,
`expTime` VARCHAR(45) NOT NULL,
PRIMARY KEY (`s_id`)
)
ENGINE = MyISAM;
代码实例:
<?php
function open($save_path, $session_name)
{
//连接数据库的代码
return(true);
}
function close()
{
return(true);
}
function read($id)
{
//返回的数据是类似name|s:5:”wujun”;这种格式,不需要处理,PHP会处理。
//读数据库返回
return ‘name|s:5:”wujun”;sex|s:1:”1″;’;
}
function write($id, $sess_data)
{
//数据$sess_data累加到表sessions的data字段
//写数据库返回
//调用gc删除过期的session数据
return(true);
}
function destroy($id)
{
//在数据库删除数据
}
/*********************************************
* WARNING - You will need to implement some *
* sort of garbage collection routine here. *
*********************************************/
function gc($maxlifetime)
{
//删除过期的session数据
return true;
}
ini_set(”session.save_handler”,”user”);
session_set_save_handler(”open”, “close”, “read”, “write”, “destroy”, “gc”);
session_start();
$_SESSION['name'] = “wujun”;
echo $_SESSION['name'];
?>
关于本文:
供稿:吴军(资深WEB工程师)
编辑:陈虎城
初稿:2008年06月21日
版权:吴军、陈虎城所有,禁止转载,侵权必究。
联系我们:
陈虎城(WEB工程师兼市场兼销售):
吴军:信息保密(可先联系本人)
TEL:020 - 89548367
TEL:137 1127 5382
QQ: 28693177 24178693
Email:China.Sale@QQ.com
MSN/Email:WebForChina@Gmail.Com
地址:广州市越秀区广园西路137号军山大酒店3楼
邮编:510400