通过修改PHP-FPM配置文件,实现session会话共享:

- 配置PHP使用memcached服务器共享Session信息

- 客户端访问两台不同的后端Web服务器时,Session 信息一致

环境:

- 部署LNMP+memcached网站平台, 参考之前的随笔,这里不做介绍

- Nginx服务器除了承担调度器外,还需要担任memcached数据库的角色,并在两台后端LNMP服务器上实现PHP的session会话共享

拓扑图:

一, 在后端的两台LNMP服务器上部署Session共享, 以 web1为例(web也需做如下相同操作)

1.为PHP添加memcache扩展

[root@web1 ~]# yum -y install php-pecl-memcache     #两台web服务器都要安装

2.修改PHP-FPM配置文件,并重启服务

[root@web1 ~]# vim /etc/php-fpm.d/www.conf          #注意,只需要修改文件的最后2行

修改前:

php_value[session.save_handler] = files

php_value[session.save_path] = /var/lib/php/session     #默认定义Sessoin会话信息在本地计算机的/var/lib/php/session

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

修改后:

php_value[session.save_handler] = memcache  #定义Session信息存储在公共的memcached服务器上,主机参数中为memcache(没有d)

php_value[session.save_path] = "tcp://192.168.2.5:11211"   #通过path参数定义公共的memcached服务器在哪(服务器的IP和端口)

[root@web1 ~]# systemctl restart php-fpm

二, 客户端使用浏览器访问web1和web2,验证Session是否一致

1.  部署 web1 的测试页面

[root@web1 ~]# tar -xf php-memcached-demo.tar.gz    #找一个php的测试页面

[root@web1 php_scripts]# cd php-memcached-demo

[root@web1 php-memcached-demo]# ls
     home.php  images  index.php  login.php  README.md  style.css

[root@web1 php-memcached-demo]# cp -r * /usr/local/nginx/html/      #拷贝php页面到Nginx的网页目录下

[root@web1 php-memcached-demo]# vim home.php

<body bgcolor=blue>    #定义home.php的页面颜色为blue, 以便于区分后端两台不同的web服务器

[root@web1 php-memcached-demo]# vim index.php

<body bgcolor=red>    #定义index.php的页面颜色为red,以便于区分后端两台不同的web服务器

2. 部署 web2 的测试页面

[root@web2 ~]# tar -xf php-memcached-demo.tar.gz    #找一个php的测试页面

[root@web2 php_scripts]# cd php-memcached-demo

[root@web2 php-memcached-demo]# ls
    home.php  images  index.php  login.php  README.md  style.css

[root@web2 php-memcached-demo]# cp -r * /usr/local/nginx/html/      #拷贝php页面到Nginx的网页目录下

[root@web2 php-memcached-demo]# vim home.php

<body bgcolor=blue>    #定义home.php的页面颜色为blue, 以便于区分后端两台不同的web服务器

[root@web2 php-memcached-demo]# vim index.php

<body bgcolor=red>    #定义index.php的页面颜色为red,以便于区分后端两台不同的web服务器

3. 浏览器访问后端服务器web1和web2 的测试页面

[root@web1 ~]# firefox http://192.168.2.100       #在web1网站上注册用户,密码

[root@web1 ~]# cd /var/lib/php/session/

[root@web1 ~]# ls     #查看服务器本地生成的Session信息

sess_qqek1tmel07br8f63d6v9ch401

[root@web2 ~]# firefox http://192.168.2.200       #在web2网站上注册用户,密码

[root@web2 ~]# cd /var/lib/php/session/

[root@web2 ~]# ls     #查看服务器本地生成的Session信息

sess_qqek1tmel07br8f63d6v9ch401

4. 总结

可以看到, 客户端访问两台不同的后端Web服务器时,Session 信息一致,实现共享.

结束.

PHP实现session共享的更多相关文章

  1. Nginx反向代理,负载均衡,redis session共享,keepalived高可用

    相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tomcat服务器两台,由nginx进行反向代理和负载均衡,此 ...

  2. 分布式中使用Redis实现Session共享(二)

    上一篇介绍了一些redis的安装及使用步骤,本篇开始将介绍redis的实际应用场景,先从最常见的session开始,刚好也重新学习一遍session的实现原理.在阅读之前假设你已经会使用nginx+i ...

  3. windows 环境下nginx + tomcat群 + redis 实现session共享

    nginx作为负载均衡根据定义将不同的用户请求分发到不同的服务器,同时也解决了因单点部署服务器故障导致的整个应用不能访问的问题 在加入nginx之后,如果多个服务器中的一个或多个(不是全部)发生故障, ...

  4. shiro实现session共享

    session共享:在多应用系统中,如果使用了负载均衡,用户的请求会被分发到不同的应用中,A应用中的session数据在B应用中是获取不到的,就会带来共享的问题. 假设:用户第一次访问,连接的A服务器 ...

  5. Redis安装及实现session共享

    一.Redis介绍 1.redis是key-value的存储系统,属于非关系型数据库 2.特点:支持数据持久化,可以让数据在内存中保存到磁盘里(memcached:数据存在内存里,如果服务重启,数据会 ...

  6. Tomcat7基于Redis的Session共享实战二

    目前,为了使web能适应大规模的访问,需要实现应用的集群部署.集群最有效的方案就是负载均衡,而实现负载均衡用户每一个请求都有可能被分配到不固定的服务器上,这样我们首先要解决session的统一来保证无 ...

  7. Nginx+Tomcat+Redis实现负载均衡、资源分离、session共享

    Nginx+Tomcat+Redis实现负载均衡.资源分离.session共享 CentOS安装Nginx http://centoscn.com/CentosServer/www/2013/0910 ...

  8. IIS下Asp.Net应用程序多进程设置及Session共享

    背景: 目前项目中在单个进程的应用程序经常会遇到w3c.exe崩溃的情况,于是就设想是否可以通过IIS多进程的方案来避免出现该问题. 于是搜了下“怎么实现多进程的方案”,找到了这篇文章:http:// ...

  9. 集群间Session共享问题解决方案

    两个基本概念的生命周期 session: 当新客户端发现一个HTTP请求时服务端会创建一个session.并分配一个sessionID作为服务端来客户端的识别,session对象会保存在服务端.此时s ...

  10. CAS 集群部署session共享配置

    背景 前段时间,项目计划搞独立的登录鉴权中心,由于单独开发一套稳定的登录.鉴权代码,工作量大,最终的方案是对开源鉴权中心CAS(Central Authentication Service)作适配修改 ...

随机推荐

  1. APIO2019解题报告

    「APIO 2019」奇怪装置 题目描述 有无限个二元组,每个二元组为\(((t+\left\lfloor\frac{t}{B} \right\rfloor)\%A,t \% B)\),给出一些区间, ...

  2. HTML,CSS,JavaScript的思维导图

    一个思维导图是把抽象的事物具体化,以一个东西为思想核心内容,映射出一系列的组成及作用 影响的内容. HTML的思维导图 HTML是一种超文本标记语言.我认为要学习一门语言首先要知道其是什么,编辑工具是 ...

  3. 关于【C++项目:无法解析的外部符号】

    1,基本原因,[链接器]->[附加库目录]没有填写相关库的路径.或没有在[链接器]->[输入]->[附加依赖项]中填写相关库的名称 2,高级原因:如果不是1的原因,那就有可能是平台与 ...

  4. C# 防火墙操作之特定端口

    针对将特定端口加入到windows系统的防火墙中,使其允许或禁止通过防火墙.其大概思路是: /// <summary> /// 添加防火墙例外端口 /// </summary> ...

  5. linux的find和grep区别?

    为什么会把 grep和find 这两个命令拿在一起来讨论? 是因为他们之间有一个容易混淆的地方, [在我的记忆中] : -name ? 它是find的选项! 不是grep的选项! 实际上, find基 ...

  6. 职位-CFO:CFO

    ylbtech-职位-CFO:CFO 首席财务官——CFO(Chief Finance Officer)是企业治理结构发展到一个新阶段的必然产物.没有首席财务官的治理结构不是现代意义上完善的治理结构. ...

  7. 像计算机科学家一样思考python-第3章 函数

    在程序设计中,函数是指用于进行某种计算的一系列语句的有名称的组合.定义一个函数时,需要指定函数的名称并写下一系列程序语句.之后,就可以使用名称来“调用”这个函数 3.1函数调用 一个函数调用的例子 & ...

  8. template标签就相当于React中的fragment

    template标签就相当于React中的fragment

  9. c# Thread——1.为什么Abort中断线程是不可靠的

    Thread.Abort 方法在c#中用作强制中断线程的执行,大多用于线程内部满足某个特定条件而自己调用关闭自身,比如下面的代码在i自增到3的时候就会停止打印. class Program { sta ...

  10. mysql5.7.23性能调优之innodb_buffer_pool_size

    前言 我的数据库版本是5.7.23,最近发现执行SQL越来越慢,一条SQL语句执行需要将近30s. 对于原因,查询资料, https://www.cnblogs.com/qwangxiao/p/892 ...