多服务器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

Leave a comment

Please be polite and on topic. Your e-mail will never be published.