• 128548

    文章

  • 807

    评论

  • 12

    友链

  • 最近新加了换肤功能,大家多来逛逛吧~~~~
  • 喜欢这个网站的朋友可以加一下QQ群,我们一起交流技术。

tomcat集群时session共享问题

服了这份高薪指南,涨多少你说了算>>

简单聊一下面对tomcat集群,我们如何管理session。

使用nginx

第一种方法比较简单,比较笨,就是将session进行广播,多个tomcat互相广播session,即用户在一个tomcat登陆后,将这个tomcat保存的用户session信息,广播到其他tomcat里。这样子不管用户的请求分配给哪个tomact,都存有用户的session信息。

缺点:这无疑增加了每个tomact对内存的消耗。不可取。

 

第二种方法是,IP绑定。即nginx提供ip-hash功能,将固定的ip发起的请求始终分配给固定的tomcat来处理。那么这个tomcat就会存在该用户的session信息。

缺点:

1、一大堆人连同一个网访问的时候,就没有负载均衡这一说了,这一大堆的ip都是一样,都去访问同一个tomcat。

2、如果这个人访问的tomcat突然挂了,那nginx的故障转移机制将会分发给另一个tomcat服务器,这样一来所有请求这个tomcat的所有用户就又需要重新登入了。

3、如果这个人用着用着突然在用的网络不稳定,然后这个人换了另一个网,这样ip一换,这个人又要重新登入了。

 

使用redis

tomcat-redis-session-manager

多个tomcat上的应用,配置了同一个redis服务器,来存储session信息。达到了共享session的作用。

 

使用jwt

放弃session机制,使用jwt机制。简单来说就是userid+随机数+签名加密生成一个token,前后端通信通过token来交互。客户端第一次请求登入之后,服务器端给客户端一个token,服务器将token作为key值,userid作为value值,30分钟作为有效时间存入redis中;客户端第二次访问controller之前进行拦截,判断是否有token,如果有token解密获取userid,然后取查询redis,token和userid是否匹配,如果匹配就允许访问controller,请求返回之后,服务器将重新生成新的token返回给客户端。简单来说就是每次请求成功之后token都会改变,token存在redis中,这样一来至于redis分发到哪个tomat并不影响,因为token是存在redis中的。

这种服务模式就是一种用户的无状态服务。所写接口,均不判断用户是否登录,是否合法,只通过约定的秘钥来判断请求是否正确,只要正确,就提供返回结果。

 


695856371Web网页设计师②群 | 喜欢本站的朋友可以收藏本站,或者加入我们大家一起来交流技术!

0条评论

Loading...


发表评论

电子邮件地址不会被公开。 必填项已用*标注

自定义皮肤 主体内容背景
打开支付宝扫码付款购买视频教程
遇到问题联系客服QQ:419400980
注册梁钟霖个人博客