爱吃窝窝头 2019-11-07 22:23 采纳率: 0%
浏览 370

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串了,该怎么解决

  • 写回答

2条回答 默认 最新

  • 关注
    评论

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条