美文网首页
通过请求分发到多台web容器实例,会话状态不能正确识别的解决方案

通过请求分发到多台web容器实例,会话状态不能正确识别的解决方案

作者: lonmao | 来源:发表于2022-01-07 14:33 被阅读0次

场景:
部署了2台以上的web实例,用户请求到Nginx,通过一定的规则分发到实例上,直接鉴权就会导致用户的登录请求去到了实例A,后续请求去到实例B,但是B这边没有回话状态信息,就会认为该用户未登录。

原因:
原因是实例A认证登录通过后,会话信息没有同步到其余实例导致的,即其他实例拿不到信息自然会认为未登录。

方案:
既然原因的登录的会话信息未同步导致的,那么同步即可。

方案1:
通过登录逻辑后,将登录信息放在cookie中(比如一个变量isLogin),后续请求从cookie中获取前述信息,从而判断登录状态。
优势:方便快速,开发成本低
缺陷:安全性低,如果知道你的变量和逻辑,有可能被伪造登录数据。

方案2:
在cookie中维护一个类似sessionId的东西,用户登录后,set sessionId,然后将这个id作为key,这样关于这个会话相关的信息都可以维护在key对应的value中,除了登录态,其他公共信息也可以,至于这个数据是放在codis还是sql中就看业务抉择了;当用户退出登录,可以干掉这个key-value,也可以直接在cookie中set sessionId=null

优势:
安全性高,通过一个id来绑定用户当前会话状态,可以多个实例共享会话数据;
自己实现的逻辑,利于后期迭代维护;
除了登录状态,还能存储公共的用户会话信息;

缺陷:
需要自己实现,复杂度稍高;
多实例共享数据会有额外开销;

方案3:
接入市面上已有的会话一致性组件

相关文章

  • 通过请求分发到多台web容器实例,会话状态不能正确识别的解决方案

    场景:部署了2台以上的web实例,用户请求到Nginx,通过一定的规则分发到实例上,直接鉴权就会导致用户的登录请求...

  • java基础面试题(一)

    1、servlet执行流程 客户端发出http请求,web服务器将请求转发到servlet容器,servlet容器...

  • 面试题集

    servlet执行流程 客户端发出http请求,web服务器将请求转发到servlet容器,servlet容器解析...

  • 面试题集

    servlet执行流程 客户端发出http请求,web服务器将请求转发到servlet容器,servlet容器解析...

  • java面试题.03

    1、servlet执行流程 客户端发出http请求,web服务器将请求转发到servlet容器,servlet容器...

  • 2018-01-03 java 面试 最新

    1、servlet执行流程 客户端发出http请求,web服务器将请求转发到servlet容器,servlet容器...

  • 2018年java技术面试题整理

    1、servlet执行流程 客户端发出http请求,web服务器将请求转发到servlet容器,servlet容器...

  • 2019年最新面试题

    1、servlet执行流程 客户端发出http请求,web服务器将请求转发到servlet容器,servlet容器...

  • 会话与状态管理

    Web应用中的会话与会话状态 Web应用的会话状态是指Web服务器与浏览器在会话过程中产生的状态信息,借助会话状态...

  • 面试知识点

    面试知识点 1、servlet执行流程 客户端发出http请求,web服务器将请求转发到servlet容器,ser...

网友评论

      本文标题:通过请求分发到多台web容器实例,会话状态不能正确识别的解决方案

      本文链接:https://www.haomeiwen.com/subject/icujcrtx.html