一、重复登录问题解决的方案汇总

随着微服务和分布式系统的普及,解决用户登录问题变得至关重要。本文汇总了多种session共享方案,包括基于Nginx的ip_hash负载均衡、Tomcat的session复制、利用Redis作为统一缓存以及将session存储在cookie中。每种方案都有其适用场景和配置细节,例如通过Nginx的ip_hash策略确保用户请求始终路由到同一服务器,或者通过Redis实现跨服务器的session共享。

随着互联网公司的项目在微服务和分布式的环境下进行的搭建,导致一个项目可能分别部署在几个甚至很多的服务器集群下,此时就会出现一个问题,当用户进行一个session会话的时候,比如一个用户去登录项目,一般的大公司的项目都是有Nginx进行反向代理的,

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

  1. 轮询策略;

  1. 权重比例策略;

  1. ip_hash策略;

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

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

所以session共享方案在分布式环境和微服务系统下,显得尤其重要。

二、解决方案

1、基于Nginx(或其他负载的软件或硬件)的ip_hash 负载均衡

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

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

upstream backend{

ip_hash;

server 19x.xxx.xxx.A:8080 ;

server 19x.xxx.xxx.B:8080 ;

server 19x.xxx.xxx.C:8080 down;

server 19x.xxx.xxx.D:8080 down;

}

server {

listen 8081;

server_name test.youkuaiyun.com;

root

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ReaderTheEnd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值