再谈session--session的domain属性
时间:2010-10-14 来源:库从志
session的domain属性标识了该session属于哪一个域名站点;如果我们在php配置文件中不对这个进行配置,默认情况下它就是整个的域名值。例如你的域名为aa。bb.cc.com 那么如果你做任何地设置,你在辅助工具里面看到该页面的seesion domain值便是aa.bb.cc.com。有时候我们一个项目里面要用到多级域名,例如dd.bb.cc.com;这个时候我们想让session在两个域名里面都可以使用,那么可以在php配置文件中设置session_domain=bb.cc.com.
有了上面的介绍,看看前段时间的一个问题:由于服务器的整合,我们需要把好几个系统整合好一套系统上。服务器的架构是这样的,三台前端机跑nginx,两台数据库机器,还有两台memcache缓存。三台前端机使用lvs软件进行负载均衡,每台的配置一样并同时都运行多个系统(如a.x.com;b.x.com;c.x.com)由于以前这三个系统分布在不同的平台,所以并没有配置session_domain的选项。现在这个三个系统在每台机器上都有,而且每台的配置一样。而我们的要求就是三个系统从外部来看是独立。这个时候就不需要设置session_domain的值。
如果我们设置这样的值,会有什么样的后果。例如把它设置成为.x.com
我们所有的session信息都存储在memcache中,而三个系统的session_name一样。所以用户登录a系统的时候,生成一个session,但是当用同时又登录b系统的时候,一个新的session会修改以前a的session。这样两个系统的数据就产生混乱。
使用上面的架构主要是基于系统可靠性的考虑