简单聊一下面对tomcat集群,咱们如何管理session。nginx
第一种方法比较简单,比较笨,就是将session进行广播,多个tomcat互相广播session,即用户在一个tomcat登录后,将这个tomcat保存的用户session信息,广播到其余tomcat里。这样子无论用户的请求分配给哪一个tomact,都存有用户的session信息。redis
缺点:这无疑增长了每一个tomact对内存的消耗。不可取。后端
第二种方法是,IP绑定。即nginx提供ip-hash功能,将固定的ip发起的请求始终分配给固定的tomcat来处理。那么这个tomcat就会存在该用户的session信息。tomcat
缺点:服务器
一、一大堆人连同一个网访问的时候,就没有负载均衡这一说了,这一大堆的ip都是同样,都去访问同一个tomcat。网络
二、若是这我的访问的tomcat忽然挂了,那nginx的故障转移机制将会分发给另外一个tomcat服务器,这样一来全部请求这个tomcat的全部用户就又须要从新登入了。session
三、若是这我的用着用着忽然在用的网络不稳定,而后这我的换了另外一个网,这样ip一换,这我的又要从新登入了。负载均衡
多个tomcat上的应用,配置了同一个redis服务器,来存储session信息。达到了共享session的做用。加密
放弃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中的。spa
这种服务模式就是一种用户的无状态服务。所写接口,均不判断用户是否登陆,是否合法,只经过约定的秘钥来判断请求是否正确,只要正确,就提供返回结果。