很多时候一个完整的系统可能运行在多个服务器上,如果这多个服务器之间需要共享session的话,那么php默认的files保存session的方式就无能为力了。这时我们可以考虑使用memcache 来接管session的保存与读取工作。

第一步:我们需要在服务器上搭建必要的环境,

php 、web server的安装不是主题就不多说了,其他还需要的是 memcached 服务端、php_memcache扩展

下面安装为centos 下的示例(注:以下安装命令跟服务器配置有关,不能保证通用性,请根据实际情况进行调整)

安装 memcached

安装php_memcache扩展

或者

注:扩展安装完毕后需要重启web server来使用扩展生效

第二步:启动memcached服务进程

第三步:检查php扩展是否正确安装

1、命令行执行php -m 查询结果中是否有memcache项

2、创建phpinfo()页面,查询session项下面的Registered save handlers值中是否有memcache项

第四步:在两台服务器上进行测试

测试代码示例:

保存上面代码(注意替换域名和IP),分别放在两台服务器的web目录下,打开两个浏览器标签,先后访问两个地址,如果两个页面输出的session_time后的时间戳和session_id是一样的话就说明已经OK了。

第五步:修改现有代码,切换php的session.save_handler

在所有需要共享session的入口文件中都增加以下代码(需要加在session_start()函数之前)

或者也可以直接到php.ini中修改上面三行的相应的取值,这样就不需要改动已有的PHP代码,根据实际情况选择方案。

第一行是指定session的保存方式

第二行是指定session_id生成的cookie域,也就是你想要共享session的cookie域,注意替换成自己的域名

第三行是session的保存路径,这里是使用tcp去连接memcached端口,注意替换成自己的提供memcache服务的服务器IP

OK,大功告成了。

注:由于memcache协议是不需要权限验证的,任何人都可以访问memcache中存储的数据,所以需要设置好防火墙规则,禁止未授权IP访问,或者在启动memcached进程时使用 -l 参数指定只监听局域网IP。

当然,要实现多机session共享还有其他很多方式,

如:

1、tokyo tyrant ,这个和memcache原理相同

2、session保存在数据库中(需要自己定时清理数据库中过期的session)

3、通过NFS文件共享的方式,多台WEB服务器共享保存session文件的磁盘 http://imysql.cn/?q=node/202

转 http://my.oschina.net/miaoyushun/blog/55180

PHP + Memcache 实现多服务器session共享的更多相关文章

  1. PHP实现跨服务器session共享的方法教程

    今天带来PHP实现跨服务器session共享的方法教程. 本文实例讲述了PHP实现cookie跨域session共享的方法.分享给大家供大家参考,具体如下: 做过web开发的小伙伴们都了解cookie ...

  2. session以及分布式服务器session共享

    一.session的本质 http协议是无状态的,即你连续访问某个网页100次和访问1次对服务器来说是没有区别对待的,因为它记不住你. 那么,在一些场合,确实需要服务器记住当前用户怎么办?比如用户登录 ...

  3. PHP实现多服务器SESSION共享

    为什么要session共享? 现在稍微大一点的网站基本上都有好几个子域名,比如www.feiniu.com, search.feiniu.com, member.feiniu.com,这些网站如果需要 ...

  4. 负载均衡服务器session共享的解决方案

    在ASP.NET的程序中要使用Session对象时,必须确保页面的@page指令中EnableSessionState属性是True或者Readonly,并且在web.config文件中正确的设置了S ...

  5. 负载均衡服务器session共享的解决方案 (转载)

    http://luanzhz.blog.163.com/blog/static/58023129201101811445262/ 在ASP.NET的程序中要使用Session对象时,必须确保页面的@p ...

  6. Tomcat通过Memcached实现session共享的完整部署记录

    对于web应用集群的技术实现而言,最大的难点就是:如何能在集群中的多个节点之间保持数据的一致性,会话(Session)信息是这些数据中最重要的一块.要实现这一点, 大体上有两种方式:一种是把所有Ses ...

  7. (转)tomcat架构&session共享

    (二期)16.tomcat的整体架构与session共享方案 [课程16]tomcat...共享.xmind47.6KB [课程16]tomcat...流程.xmind0.6MB [课程16]tomc ...

  8. Memcached做Tomcat的session共享

    基于cache DB缓存的session共享 基于memcache/redis缓存的session共享.即使用cacheDB存取session信息,应用服务器接受新请求将session信息保存在cac ...

  9. SqlServer Session共享注意点

    公司下派任务,之前的网站是一台服务器,由于用户过多,负载过大,现在老大要求多加一台服务器.加就加贝,应该跟我这DEV没有 关系吧,应该不会碰到Source的吧.但是,之前网站有一些数据是放在Sessi ...

随机推荐

  1. Printing Array elements with Comma delimiters

    https://www.codewars.com/kata/printing-array-elements-with-comma-delimiters/train/csharp using Syste ...

  2. 泛型之Dictionary

    Dictionary<string, string>是一个泛型 他本身有集合的功能有时候可以把它看成数组 他的结构是这样的:Dictionary<[key], [value]> ...

  3. Java中正则表达式的使用

    public class Test{ public static void main(String args[]) { String str="@Shang Hai Hong Qiao Fe ...

  4. Shared Assembilies and Strongly Named Assemblies

    the .NET Framework has in place to deal with versioning problems. Two Kinds of Assemblies, Two Kinds ...

  5. CUBRID学习笔记 5 错误码

    服务器错误码 AS Error Code Number CAS Error Code Error Message Note -1000 CAS_ER_DBMS "CUBRID DBMS Er ...

  6. python内置函数的归集

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明. Python内置(built-in)函数随着python解释器的运行而创建.在Pytho ...

  7. sgu-508 Black-white balls 概率-贝叶斯公式

    题意:有n个球,其中有0.1.2...n个黑球的概率是相等的,现在从中取出L个球,p个黑球q个白球.现在问猜一个黑球的区间,使得落在这个区间的概率大于给定的一个数值. 详见代码: #include & ...

  8. Spring读书笔记-----使用Spring容器(二)

    一.使用ApplicationContext 前面介绍了,我们一般不会使用BeanFactory实例作为Spring容器,而是使用ApplicationContext实例作为容器,它增强了BeanFa ...

  9. jquery使用技巧

    1. 禁用右键点击(Disable right-click) <!DOCTYPE html> <html> <head> <meta charset=&quo ...

  10. 关于js的兼容问题(小办法)!

    今天整理了一下浏览器对JS的兼容问题,希望能给你们带来帮助,我没想到的地方请留言给我,我再加上: 常遇到的关于浏览器的宽高问题: //以下均可console.log()实验 var winW=docu ...