一起聊聊PHP session共享的四种解决方案

本文给大家介绍PHP session相关知识,下面带大家先从为什么会出现这种session共享的解决方案开始了解,希望对需要的朋友有所帮助~

先了解一下为什么会出现这种session共享的解决方案?

随着互联网公司的项目在微服务和分布式的环境下进行的搭建,导致一个项目可能分别部署在几个甚至很多的服务器集群下,此时就会出现一个问题:

当用户进行一个session会话的时候,比如一个用户去登录项目,一般的大公司的项目都是有Nginx进行反向代理的,

这里简单列举一下Nginx常用的几种反向代理策略:

轮询策略,权重比例策略,ip_hash策略,还可以自定义的策略,

在Nginx的反向代理下,一般会把用户的请求分发到不同的服务器上,但是如果用户请求的请求是存放在该请求的服务器A上,那么该用户的sessionID就存储在该服务器上JVM的一个ConcurrentHashmap中,以sessionID为key。

但是如果此时用户请求的一个服务模块可能需要调用到服务器B,当用户发起请求的时候,此时的服务器B上并没有存储该用户的sessionID,所以就会再次让用户进行一个登陆操作。还有可能会导致用户本来就想完成一个下单操作,但是却还登陆了好几次的情况。

所以session共享方案在分布式环境和微服务系统下,显得尤其重要。【推荐学习:《PHP视频教程》】

解决方案一:基于Nginx的ip_hash 负载均衡

其实就是对请求过来的ip地址对你的多少台可用的服务器进行取模,然后就会把你的请求通过Nginx的反向代理给分发到对应的服务器上。(这里会把可用的服务器放到一个数组中,如果取模得到的结果是几,就把请求分到服务器数组中的下标为几的服务器上)

具体实现:

需要你在Nginx.conf文件中进行对应的修改,根据自己的可用服务器

upstream backend{
    ip_hash;
    server 192.168.128.1:8080 ;
    server 192.168.128.2:8080 ;
    server 192.168.128.3:8080 down;
    server 192.168.128.4:8080 down;
 
}
server {
    listen 8081;
    server_name test.csdn.net;
    root /home/system/test.csdn.net/test;
    location ^~ /Upload/upload {
    proxy_pass http://backend;
 
    }
 
}

登录后复制

hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » 一起聊聊PHP session共享的四种解决方案
温馨提示您:本站所载文章、数据仅供参考,如果有文章侵犯了您的权益,请来信告知我们删除,联系邮箱:976157886@qq.com
Copyright © 2023 自学咖网 - All rights reserved 浙ICP备2023005527号