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

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

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

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

一、问题起源

稍大一些的网站,通常都会有好几个服务器,每个服务器运行着不同功能的模块,使用不同的二级域名,而一个整体性强的网站

,用户系统是统一的,即一套

用户名、密码在整个网站的各个模块中都是可以登录使用的。各个服务器共享用户数据是比较容易实现的,只需要在后端放个数据库服务器,各个服务器通过统一接

口对用户数据进行访问即可。但还存在一个问题,就是用户在这个服务器登录之后,进入另一个服务器的别的模块时,仍然需要重新登录,这就是一次登录,全部通

行的问题,映射到技术上,其实就是各个服务器之间如何实现共享 SESSION 数据的问题。

二、PHP SESSION 的工作原理

在解决问题之前,先来了解一下 PHP SESSION 的工作原理。在客户端(如浏览器)登录网站时,被访问的 PHP 页面可以使用

session_start() 打开 SESSION,这样就会产生客户端的唯一标识 SESSION ID(此 ID 可通过函数session_id() 获取/设置)。

SESSION ID 可以通过两种方式保留在客户端,使得请求不同的页面时,PHP 程序可以获知客户端的

SESSION ID;一种是将 SESSION ID 自动加入到 GET 的 URL 中,或者 POST 的表单中,默认情况下,变量名为

PHPSESSID;另一种是通过 COOKIE,将 SESSION ID 保存在 COOKIE 中,默认情况下,这个 COOKIE 的名字为

PHPSESSID。这里我们主要以 COOKIE 方式进行说明,因为应用比较广泛。

那么 SESSION 的数据保存在哪里呢?当然是在服务器端,但不是保存在内存中,而是保存在文件或数据库中。默认情况下,php.ini 中设置的

SESSION 保存方式是 files(session.save_handler = files),即使用读写文件的方式保存 SESSION

数据,而 SESSION 文件保存的目录由 session.save_path 指定,文件名以 sess_ 为前缀,后跟 SESSION

ID,如:sess_c72665af28a8b14c0fe11afe3b59b51b。文件中的数据即是序列化之后的 SESSION

数据了。如果访问量大,可能产生的 SESSION 文件会比较多,这时可以设置分级目录进行 SESSION

文件的保存,效率会提高很多,设置方法为:session.save_path="N;/save_path",N 为分级的级数,save_path

为开始目录。当写入 SESSION 数据的时候,PHP 会获取到客户端的 SESSION_ID,然后根据这个 SESSION ID 到指定的

SESSION 文件保存目录中找到相应的 SESSION 文件,不存在则创建之,最后将数据序列化之后写入文件。读取

相关文档:

[转贴] 榨干 PHP,不得不转的一篇PHP使用技巧!

这篇杂文翻译整理自网络各路文档资料(见最末的参考资料),尤其是 Ilia Alshanetsky (佩服之至) 在多个 PHP 会议上的演讲,主要是各类提高 PHP 性能的技巧。为求精准,很多部分都有详细的效率数据,以及对应的版本等等。偷懒,数据就不一一给出了,直接给结论,如果需要看原� ......

in_array(value,array,type)

in_array 作用是用于查看 value 是否在 array 中存在,如果参数 value 是字符串,且 type 参数设置为 true,则搜索区分大小写。则 in_array 是 区分大小写 的。

有一点需要注意,当 array 中包含 value 的值,则返回 true; 但是,如果两者参数之间相等,则返回 false

例如:

$str = 'a';

......

文件读取函式

//文件读取函式

function PHP_Read($file_name) {

$fd=fopen($file_name,r);

while($bufline=fgets($fd, 4096)){

$buf.=$bufline;

}

fclose($fd);

return $buf;

}

& ......

class useful{

/*

* 常用函数类

* 作    者:多菜鸟

* 联系邮箱:kingerq AT msn DOT com

* 创建时间:2005-07-18

* 来源:http://blog.csdn.net/kingerq

*/

/*

* 功能:格式化数字,以标准MONEY格式输出

......

pack/unpack的摸板字符字符含义

format 参数的可能值:

a - NUL-padded string

A - SPACE-padded string

h - Hex string, low nibble first

H - Hex string, high nibble first

c - signed char

C - unsigned char

s - signed short (always 16 bit, machine byte order)

S - unsigned short (always 16 bi ......

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值