session 共享的实现方式(PHP)
最近正在研究负载均衡和web server的集群架构,其中有一点会涉及到web server集群中各主机的session如何共享的问题。
业界对于这个问题的解决大体会用以下三种方式:
1. 将session存入专门的一个数据库
2. 将session存入专门的一台session服务器的磁盘里
3. 将session存入专门的一台session服务器的内存里
对于这几个方案,各有优势,关键看你的系统的特性来决定选择什么方案吧。
我针对第三个方案做了一个demo,选择的是大名鼎鼎的memcache来做内存缓存session的服务器
各个web server端需要做一些配置工作,如下:
1. 打开php.ini配置文件
2. 修改这些内容
session.save_handler = memcache (默认是files,改成memcache)
session.save_path = "tcp://localhost:11211" (memcache server的地址或者域名)
session.cookie_domain = .test.com (将cookie的有效域设置成同一个域名,目的是为让各个web server对同一个客户端生成同一个SESSION ID)
暂时就是这些配置
测试一下吧:
session_start();
if (!isset($_SESSION["TEST1"])) {
$_SESSION["TEST1"] = time();
}
$_SESSION["TEST2"] = time();
print $_SESSION["TEST1"];
print "<br><br>";
print $_SESSION["TEST2"];
print "<br><br>";
print session_id();
print "<br><br>";
$memcache = new Memcache;
$memcache = memcache_connect("localhost", 11211);
var_dump($memcache->get(session_id()));
- 上一篇: 将php的session保存到内存中
- 下一篇: file_put_contents 高并发与独占锁定