session共享如何实现(解决session共享的方式)

来源:国外服务器 在您之前已被浏览:1 次
导读:目前正在解读《session共享如何实现(解决session共享的方式)》的相关信息,《session共享如何实现(解决session共享的方式)》是由用户自行发布的知识型内容!下面请观看由(国外主机 - www.2bp.net)用户发布《session共享如何实现(解决session共享的方式)》的详细说明。
笨笨网美国主机,w ww.2 b p .n e t

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

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

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

轮询策略,

权重比例策略,

ip_hash策略,

还可以自定义的策略,

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

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

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

解决方案一:基于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; } }

这种实现的优缺点:

session共享如何实现(解决session共享的方式)

解决方案二:基于Tomcat的session复制

这个解决方案其实就是当用户请求的时候,把产生的sessionID给复制到系统所有的服务器中,这样就能保证当用户请求的时候从服务器A可能调用到服务器B上的模块的时候,也能保证服务B也有该用户的sessionID,这样就不会再次让用户进行再次登录操作了。也就解决问题了。

具体代码中如何实现session复制呢?

session共享如何实现(解决session共享的方式)

使用session复制的优缺点:

session共享如何实现(解决session共享的方式)

解决方案三:使用Redis做缓存session的统一缓存

这种方案呢,其实就是把每次用户的请求的时候生成的sessionID给放到Redis的服务器上。然后再基于Redis的特性进行设置一个失效时间的机制,这样就能保证用户在我们设置的Redis中的session失效时间内,都不需要进行再次登录。推荐:250期面试题

如何进行代码的实现:

session共享如何实现(解决session共享的方式)

使用Redis实现session共享的优缺点:

session共享如何实现(解决session共享的方式)

解决方案四:结合cookie

其实还可以把session放到cookie中去,因为每次用户请求的时候,都会把自己的cookie放到请求中,所以这样就能保证每次用户请求的时候都能保证用户在分布式环境下,也不会在进行二次登陆。

笨笨网美国主机,w ww.2 b p .n e t
提醒:《session共享如何实现(解决session共享的方式)》最后刷新时间 2025-03-21 11:17:53,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《session共享如何实现(解决session共享的方式)》该内容的真实性请自行鉴别。