在分布式中,用户的session如何处理呢?数据库
服务器中的原生session是没法知足需求的,由于用户的请求有可能随机落入到不一样的服务器中,这样的结果将会致使用户的session丢失,传统作法中有解决方案,是进行session同步,将一个服务器上的session进行同步到另外一个服务器上,在一个集群中不管你访问哪一个服务器均可以共享,可是这种方法有个明显缺陷,就是性能问题,传输有时延问题,其次这样每台服务器的session重复拥有,这样其内存必然受到影响,若是只有几台服务器还好,若是是十台,二十台服务器呢?这种恐怖的场景会是什么样的体验呢,我就没法得知了。服务器
那么咱们应该如何有效的解决这样的问题呢,咱们可使用传说中的token来解决,简单明了的说就是用户每次登录的时候生成一个相似sessionId的东西(也就是所谓的token,这将是全局的惟一标识,如UUID,做用相似于(jsessionid)),将其写到cookie当中传送给客户端,客户端对数据库访问过程当中不断上传这个token,而咱们服务端拿到这个token就能够获取用户的在线信息,这个道理其实在不少地方是相通的,好比咱们容器中实现原生session,也是将生成的id写入coolie当中。 cookie
接下来我会来详细介绍如何在登录后实现分布式sessionsession
1,利用jdk中自带的uuid生成器生成uuid用token来标记名称,并写入cookie经过response传到客户端里,分布式
2。给token设置有效时间,这里我给它设置了两天性能
3,在登录的方法里加入cookieui
4,经过@cookieValue来注解就能够获取到对应的token,可是须要注意一个问题,一些手机客户端是没用用到cookie来传的,而是直接用参数来传,那也不须要担忧,@RequestParam注解同样能够获取,须要给他们一个优先级,先判断是否有参数后判断是否cookie有值blog
5,建立方法经过token获取user信息,当用户持续在线时,咱们能够给他延迟时效。token