background image

PHP 技术:Memcache 的 Session 数据的多服务器共

本文详细分析介绍了 Memcache 的 Session 数据的多服务器共享,欢迎参考。
一相关介绍
1.memcache + memcache 的多服务器数据共享的介绍,请参见
2.session 机制:
session 机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是
使用散列表)来保存信息。
当程序需要为某个客户端的请求创建一个 session 的时候,服务器首先检查这个客户端的
请求里是否已包含了一个 session 标识- 称为 sessionid,如果已包含一个 sessionid 则说明以
前已经为此客户端创建过 session,服务器就按照 sessionid 把这个 session 检索出来使用
(如果检索不到,可能会新建一个),如果客户端请求不包含 sessionid,则为此客户端
创建一个 session 并且生成一个与此 session 相关联的 sessionid,sessionid 的值应该是一个
既不会重复,又不容易被找到规律以仿造的字符串,这个 sessionid 将被在本次响应中返
回给客户端保存。
 
保存这个 sessionid 的方式可以采用 cookie,这样在交互过程中浏览器可以自动的按照规
则把这个标识发挥给服务器。
 
一般这个 cookie 的名字都是类似于 SEEESIONID,而。比如 weblogic 对于 web 应用程序生
成的 cookie,PHPSESSID=ByOK3vjFD75aPnrF3K2HmdnV6QZcEbzWoWiBYEnLerj,它的
名字就是 PHPSESSID。

 

二动机
在实际 web 生产环境中,一个应用系统,往往将不同的业务应用分布到不同服务器上进
行处理。
当跟踪当前在线用户信息时,如果是同一个主域名时,可以用全域 cookie 处理相关数据
的共享问题;如果是在不同主域下,则可以通过观察者模式的中心话概念解决相应问题,
通过这种概念延伸出的解决方案有很多,而今天我所要讲的,是前一种,通过 memcache
的多服务器数据共享技术来模拟 session,以进行对当前在线用户数据的多服务器共享。
关于多服务器统一 session 信息,要求如下:
1.能够在 memcached 规定的几台服务器上,保存 session 信息(通过前面介绍的 memcache
的多服务器数据共享);
2.能够象 zend 定义的 session_start()前,通过 session_id(

$sessid

)那样,自定义 session_id 的

值。
3.能方便的在系统运行时,切换 memcached 存储的 session

 

信息和 用文件存储的 session 信