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

  • 随着互联网公司的项目在微服务和分布式的环境下进行的搭建,导致一个项目可能分别部署在几个甚至很多的服务器集群下,此时就会出现一个问题
  • 当用户进行一个session会话的时候,比如一个用户去登录项目,一般的大公司的项目都是有Nginx进行反向代理的,但是这里简单列举一下Nginx常用的几种反向代理策略:1.轮询策略,2. 权重比例策略,3. ip_hash策略,4. 还可以自定义的策略,在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;}}

这种实现的优缺点:

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

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

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

使用session复制的优缺点:

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

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

如何进行代码的实现:


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

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

如何实现session共享的几种解决方案?相关推荐

  1. session共享的四种方式

    session共享的四种方式 方式一:将存储在服务端的session保存在客户端cookie中 方式二:Session放在数据库中进行共享 方式三:基于NFS的session共享 方式四:基于Key ...

  2. 跨服务器Session共享的四种方法

    摘自:http://www.code163.com/web/20100423363.html 网站业务规模和访问量的逐步发展,原本由单台服务器.单个域名的迷你网站架构已经无法满足发展需要. 此时我们可 ...

  3. Tomcat 集群中 实现session 共享的三种方法

    前两种均需要使用 memcached 或 redis 存储 session ,最后一种使用 terracotta 服务器共享.  建议使用 redis ,不仅仅因为它可以将缓存的内容持久化,还因为它支 ...

  4. 关于 tomcat 集群中 session 共享的三种方法

    前两种均需要使用 memcached 或 redis 存储 session ,最后一种使用 terracotta 服务器共享. 建议使用 redis ,不仅仅因为它可以将缓存的内容持久化,还因为它支持 ...

  5. Session共享的四种方法

    1. 基于NFS的Session共享 NFS是Net FileSystem的简称,最早由Sun公司为解决Unix网络主机间的目录共享而研发. 这个方案实现最为简单,无需做过多的二次开发,仅需将共享目录 ...

  6. nginx负载均衡器处理session共享的几种方法(转)

    1) 不使用session,换作cookie 能把session改成cookie,就能避开session的一些弊端,在从前看的一本J2EE的书上,也指明在集群系统中不能用session,否则惹出祸端来 ...

  7. 集群环境下的Session共享

    一.Cookie机制和Session机制回顾 1)定义:Session成为"会话",具体是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入系统到注销退出系统之间所经过的 ...

  8. 面试官:分布式环境下,如何实现session共享

    点击关注公众号,实用技术文章及时了解 先了解一下为什么会出现这种session共享的解决方案? 随着互联网公司的项目在微服务和分布式的环境下进行的搭建,导致一个项目可能分别部署在几个甚至很多的服务器集 ...

  9. session共享的另外一篇博客.好文章

    搬运地址:https://www.cnblogs.com/newP/p/6518918.html Session分布式共享 = Session + Redis + Nginx 一.Session 1. ...

最新文章

  1. Django缓存机制
  2. unity镜像_通过镜像学习Unity Multiplayer Basics
  3. 开发日记-20190824 关键词 读书笔记《掌控习惯》DAY 3
  4. android京东加入购物车效果,京东360buy 手机项目的“加入购物车”动画效果研究...
  5. Quick cocos2dx-Lua(V3.3R1)学习笔记(十)-----搭建安卓打包环境,用官方示例anysdk生成apk运行...
  6. python多重赋值技巧_python教程12课:多元赋值、多重赋值、运算符以及判断字符串类型...
  7. Redis中的事务和watch(乐观锁)
  8. java 执行oracle 存储过程_oracle--在java中调用存储过程和存储函数
  9. Linux操作系统使用基础03:Linux文件权限与目录配置
  10. 2011年至2019年制造的 AMD 处理器均易受两种新型攻击
  11. spss多元线性回归散点图_SPSS线性回归|别人不想告诉你的其他操作我都总结好了(中)...
  12. 国内搜索大哥iOS面试题
  13. 排序算法总结(C++)
  14. 用户角色权限设计思路
  15. 中国有哪些优秀的民谣音乐人?
  16. moocpython答案_中国大学moocPython编程基础题目及答案
  17. SSL证书中的128位加密和256位加密有何区别?
  18. 最长不含重复字符的子串
  19. iOS UILabel高度的极限值
  20. 八大经典排序算法(java版)

热门文章

  1. lvgl8.2 自定义符号
  2. tp6实现(首页 某个分类下的列表 某个分类下的列表的id详情)接口开发
  3. LintCode 310. 数字变形 JavaScript算法
  4. 首届微软研究峰会视频上线,快来查收你的独家观看指南!
  5. VBA 时间相关的函数
  6. PHP内容缓存Yac
  7. Linux的起源和发展
  8. java开发什么程序_java可以开发哪些软件
  9. Flink部署——内存配置
  10. MATLAB编程实现范德蒙德型矩阵