PHP实现session共享

确认实验环境:
proxy:

# nginx
# systemctl start memcached
# ss -ntulp | grep 80 #这个80端口是nginx
# ss -ntulp | grep 11211 #memcached

web1和web2:

# nginx
# systemctl start php-fpm
# systemctl start mariadb
# ss -ntulp | grep 80 #这个80端口是nginx
# ss -ntulp | grep 9000 #php-fpm
# ss -ntulp | grep 3306 #mariadb

/usr/local/nginx/html/有php测试页面
##############################################################################
PHP实现session共享


通过修改PHP-FPM配置文件,实现session会话共享,本案例需要在练习三的基础上实现:
配置PHP使用memcached服务器共享Session信息
客户端访问两台不同的后端Web服务器时,Session 信息一致

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

步骤

步骤一:构建memcached服务

1)安装Memcached服务(如果192.168.4.5上已经有本软件包,此步骤可以忽略)
# yum -y install memcached

2)启动服务并查看网络连接状态验证是否开启成功:
[root@proxy ~]# systemctl restart memcached
[root@proxy ~]# netstat -anptu | grep memcached
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 2839/memcached
tcp 0 0 :::11211 :::* LISTEN 2839/memcached
udp 0 0 0.0.0.0:11211 0.0.0.0:* 2839/memcached
udp 0 0 :::11211 :::* 2839/memcached

3)关闭SELinux、防火墙
[root@proxy ~]# setenforce 0
[root@proxy ~]# firewall-cmd --set-default-zone=trusted
------------------------------------------------------------------------
步骤二:在后端LNMP服务器上部署Session共享

注意:这些操作在两台后端Web服务器上均需要执行,以下操作以Web1(192.168.2.100)服务器为例。

1)为PHP添加memcache扩展
注意,因为后端两台web服务器(web1,web2)都需要连接memcached数据库,所以两台主机都需要安装PHP扩展模块(下面也web1为例)。

# yum -y install php-pecl-memcache
---------------------------------------------------------------------------
2)修改PHP-FPM配置文件,并重启服务
注意,因为后端两台web服务器(web1,web2)都需要修改配置文件(下面也web1为例)。

web1和web2:
# vim /etc/php-fpm.d/www.conf
只修改最后2行,=号后面的东西。修改该配置文件的两个参数。文件的最后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
php_value[session.save_path] = "tcp://192.168.2.5:11211"

#定义Session信息存储在公共的memcached服务器上,主机参数中为memcache(没有d)
#通过path参数定义公共的memcached服务器在哪(服务器的IP和端口)

# systemctl restart php-fpm #修改了php-fpm的配置文件之后,要记得重启服务,更新配置。
-----------------------------------------------------------------------------
客户端测试

# cd /var/lib/php/session/
[root@web1 session]# ls
sess_82eih6htk9covescqipqcl0bm2 sess_vbkvabefoge01usta9ffueq2l2
[root@web1 session]# rm -rf *

然后用谷歌浏览器访问会比较快,要先清空浏览器缓存(点击右上角3个点---历史记录--历史记录---左上角3横线---清除浏览数据
192.168.4.5/index.php
随便输入帐号和密码,进入登陆后的页面,此时浏览器地址栏会变成http://192.168.4.5/home.php,会发现只用登陆一次就能成功,并且刷新的话,还可以看到背景颜色会变,说明是2台不同的服务器提供的页面。调度成功!然后复制它显示的ID号
它的页面显示如下
Welcome : lisi #用户名
Logged In : true #状态:已登陆
Session ID: 66l1icju956elo4fve2ipmpa65 #用户ID

proxy:
# telnet 192.168.2.5 11211
登陆后页面如下:
Trying 192.168.2.5...
Connected to 192.168.2.5.
Escape character is '^]'.


get 66l1icju956elo4fve2ipmpa65 #输入内容查询数据是否存在,用get 刚才复制的ID号
搜索的结果如下:
VALUE 66l1icju956elo4fve2ipmpa65 0 78
login_user|s:2:"yy";logged_in|s:4:"true";id|s:26:"66l1icju956elo4fve2ipmpa65";
END

 

posted @ 2019-04-29 00:13  安于夏  阅读(338)  评论(0编辑  收藏  举报