background image

默认情况下,COOKIE 的域是当前服务器的域名/IP 地址,而域不同的话,各个服务器所

 

设置的 COOKIE 

 

是不能相互访问的,如 www.aaa.com 

 

的服务器是不能读写 www.bbb.com 

 

服务器设置的 COOKIE 的。
这里我们所说的同一网站的服务器有其特殊性,那就是他们同属于同一个一级域,如:
aaa.infor96.com 

 

和 www.infor96.com 

 

都属于域 .infor96.com

 

,那么我们就可以设置 COOKIE 

 

的 域 为 .infor96.com

 

, 这 样 aaa.infor96.com 、 www.infor96.com   等 等 都 可 以 访 问 此 

COOKIE。PHP 代码中的设置方法如下:

<?php
ini_set

(

'session.cookie_domain'

'.infor96.com'

);

?>

 

这样各个服务器共享同一客户端 SESSION ID 的目的就达到了。

 

第二个目标的实现可以使用文件共享方式,如 NFS 方式,但设置、操作上有些复杂。我们

 

可以参考先前所说的统一用户系统的方式,即使用数据库来保存 SESSION 数据,这样各

 

个服务器就可以方便地访问同一个数据源,获取相同的 SESSION 数据了。

解决办法如下图所示:
 
四、代码实现
首先创建数据表,MySQL   

的 SQL 语句如下:

   CREATE TABLE `sess` (
     `sesskey` varchar(32) NOT NULL default '',
      `expiry` bigint(20) NOT NULL default '0',
      `data` longtext NOT NULL,
      PRIMARY KEY  (`sesskey`),
      KEY `expiry` (`expiry`)
    ) TYPE=MyISAM
sesskey 

 

为 SESSION ID,expiry   

为 SESSION 过期时间,data 

 

用于保存 SESSION 数据。

 

默认情况下 SESSION 数据是以文件方式保存,想要使用数据库方式保存,就必须重新定

 

义 SESSION 各个操作的处理函数。PHP 提供了

session_set_save_handle()

§

 函数,可以用此

 

函数自定义 SESSION 

 

的处理过程,当然首先要先将 session.save_handler 

 

改成 user,可在 

PHP 中进行设置:

<?php 
session_module_name

(

'user'

);

?>

 

接下来着重讲一下 session_set_save_handle() 函数,此函数有六个参数:

session_set_save_handler ( string open, string close, string read, string write, string destroy, string 
gc )
各个参数为各项操作的函数名,这些操作依次是:打开、关闭、读取、写入、销毁、垃圾回收。
PHP 

 

手册中有详细的例子,在这里我们使用 OO 的方式来实现这些操作,详细代码如下: