请教各位大神一个问题,在用spring session 的时候有没有遇到过服务器用户session值取错的问题,比如A用户登录取到B用户的session值。这个问题困扰了小弟好多天了,一直没找到原因,不知道有没有大神知道是什么原因呢?
这样的问题应该不会出现,先确定,你有没有做Nginx负载均衡,如果没做出现这样的情况几乎是0,session的值的存取是根据客户端的cookie来看的。不过给你个思路去想想,比如不同用户用同一台设备登录,存的cookie没有及时清除,这个几乎不可能,你可以朝着cookie的方向看看,打开浏览器F12可以查看session_id这个cookie
负载均衡是做了的,服务器是亚马逊云服务器,主要是登录的时候session取出来的值就错了。
正常情况在没有保存对象值到session里面的话,应该是取不到值的,我这个是有的时候就可以取到某个对象值了。
@布扬:那你做进程外session了吗,正常情况下session是存在网站的独立进程中的,如果做了负载均衡别的站点就没办相互访问session了。一般处理进程外session的方法有三种:
第一:存到数据库,这个网上好多帖子
第二:用Nginx的hash_id
第三:存到Redis中(这个你可以关注我的博客我后续会针对这个写一篇博文)
@☺我命由我不由天☺: 是存在redis中的,不然也不会用到spring session这个东东
@布扬: 那你就检查一下代码吧,或者查看Redis中是否存了值,讲道理如果配置好了不会有毛病的
@☺我命由我不由天☺: redis中是确定存储了session值的,配置也是根据网上大家公认的方案配置的,问题主要出现的情况是前一个用户登录和后一个用户登录时间间隔在20秒以内就出现后面登录的用户串前面登录用户信息的概率很大,其它情况基本没有。
@布扬: 同一个浏览器吗?不同浏览器也会这样?那有可能你使用的包有问题,这个hash值毕竟是包生成的,只要key相同才会拿到相同的是吧,session毕竟是存到服务器端的
@☺我命由我不由天☺: 不同浏览器也会有,不同的PC客户端也有,初步怀疑也是包有问题,但是这个情况也不好重现。
这个一般不会,是不是你记错存的值了
这个不会。
这种情况应该是不可能的,session存储在服务端,每个客户端都会存储一个session_id,客户端请求服务端的时候会根据session_id取对应的session,所以应该不会出现你说的情况,应该是其他地方出错了。
感谢各位的解答,我自己找到问题的原因了,跟spring-session没有关系是因为项目里面用了CDN缓存导致的。配置CDN的人自己也不太熟悉CDN的配置,所以导致了session串号的问题。