PHP多机实现session共享

博主小菜一枚,关于session共享只是略知一二,后来被人问起,内心忐忑,语无伦次,之后看过几篇文章后,心中安定,特此记录。

基础说明

session是服务器与客户端进行信息交互用于验证身份的一种方式,用于存储客户端的一些信息数据,php默认session存储方式为服务器本地的文件,具体配置如下:

session.save_handler = files #默认为文件存储方式
session.save_path ="D:/wamp/tmp"#session文件存储地址
session.name = PHPSESSID #存储到cookie的sessionID,每次客户端访问服务器,都会带着客户端本地的cookie信息发送到服务器

其他详细配置,可以参考php.ini,这里不过多详细说明

设计思路
单机服务器都是将session信息默认存储到自己的本地,当多台部署时,需要一个公用的session服务,保证每个服务器都可以通过公用服务获取到session信息,公用服务方式可以是文件,缓存,数据库,或者专门用于session共享服务的工具等等;
这里主要说明一下redis;
redis属于高性能服务,运行于内存,支持多种数据结构类型非常适合用于存储session信息,同事redis还有定时将内存数据固化到磁盘的功能,这在服务宕机,数据恢复方面也提供了便利,如果用memcache,则需要定时任务执行数据备份脚本;

设计方案:
一、通过php自身的session配置实现
session.save_handler = redis#配置为redis
session.save_path ="tcp://127.0.0.1:6379"#如果redis设置了密码则:session.save_path = "tcp://redis服务地址:端口?auth=密码"
该方案由于配置不支持多样化,只能用于用户少量时的应用。

二、通过框架扩展session应用,这里不贴具体代码实现,主体思路是用户所有请求均通过框架单一入口文件(现在流行框架都是这样设计),通过框架进行session扩展,开发者通过编码可以自由选择session存储机制,数据备份机制,数据恢复机制,
数据读取规则等;大体思路为session扩展类需要对外提供session信息的访问,存储,修改。session服务可以通过配置文件实现不同的架构设计,具体设计有hashMap等。


原文地址:https://www.cnblogs.com/feiyujinghong/p/6742643.html