本文共 1027 字,大约阅读时间需要 3 分钟。
为什么我要在这里提Session和Cookie,这也大型站点必须要处理问题。
在集群环境中与单服务器是不一样的,集群组成可分为调度服务器和节点,节点数量不定,单个节点安装有web服务器,用户每次访问网站调度服务器随机分配一个节点给该用户, 举一个例子:用户在网站上看新闻,点击第一个连接被分配到node 1上去,当他看完这条新闻并单击下一条时,可能被分配到其它节点上,这里刚才建立的session在node 1上, 它就会因失去session而必须重新登录。
所以我们要同步所有节点上的Session, 另外如果能用Cookie代替Session的地方尽量使用Cookie。
解决方案:
不用Session,使用Cookie取而代之
共享Session,放到数据库中,放到Memcache中
PHP Session很有解决方案:
查看PHP手册 Session Extensions 章节,重写Session逻辑。
共享Session用Memcache,在php.ini中配置即可
session.save_handler = memcachesession.save_path = tcp://127.0.0.1:10001
Cookie 我这里提到cookie是可以实现“单点登录”功能。
一个网站可能不指一组集群系统,如news.example.org, bbs.example.org, blog.example.org 要实现在一处登录即可在其它站点上同时也处于登录状态,就要用到Cookie来实现。
Cookie存储在用户端,Cookie数据极易伪造。下面提供几个方案。
在Cookie数据上加干扰词
在反向代理上做手脚
负载均衡设备都提供Cookie保护功能
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
原文出处:Netkiller 系列 手札
本文作者:陈景峯 转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。