Spring-session服务概率性session乱窜怎么解决?

环境

SpringBoot 2.0.4

SpringSession 2.0.5

Session存在Redis

两个服务,分别跑在两台服务器上
都使用的Chrom浏览器,版本可能不一样
项目中都是在方法里getSession()未曾使用静态变量持有session
客户端->Apache->服务

获取Session统一使用这种方式:

Application.getSession();

Application:

public class Application{
    // ...
    public static HttpServletRequest getRequest() {
        return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
    }
    public static HttpSession getSession() {
        return getRequest().getSession();
    }
    // ...
}

现象

在登录的用户中无规律的某个在线用户A突然就变成了另一个在线用户B,
用户A登录时使用PC1,用户B登录时使用PC2,
也就是说PC1上登录的用户突然从用户A变成了用户B,并且能以用户B的身份正常操作
通过后台日志发现,变化后,PC1对应的sessionId已经变成了用户B登录时的sessionId,但是requestHeader中携带的cookie值没变。

如下,sessionId和cookie中的SESSION的值不一样了(spring-session默认cookie中SESSION的值是sessionId使用Base64编码之后的,此处说的是解码后比较)

public void heartbeat(){
  // ...
  String sessionId = Application.getSession().getId();
  String cookie = Application.getRequest().getHeader("cookie");
  // ...
}

暂时处理办法

目前使用前后端结合检测到session串了之后自动T下线

ps: 如果我这边表达的看不太懂,也可以看这两篇,现象是一样的
率性的 session 乱串
session串了,该怎么解决

1个回答

MM889900
爱吃窝窝头 基本的配置和使用都没问题啊,和这片文章没关系
9 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐