PHP实现session共享
Posted summer2
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)启动服务并查看网络连接状态验证是否开启成功:
[[email protected] ~]# systemctl restart memcached
[[email protected] ~]# 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、防火墙
[[email protected] ~]# setenforce 0
[[email protected] ~]# 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/
[[email protected] session]# ls
sess_82eih6htk9covescqipqcl0bm2 sess_vbkvabefoge01usta9ffueq2l2
[[email protected] 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
以上是关于PHP实现session共享的主要内容,如果未能解决你的问题,请参考以下文章
php session 保存到redis 实现session的共享