最近正在研究负载均衡和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()));