爱吃窝窝头 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 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题
  • ¥15 Python时间序列如何拟合疏系数模型
  • ¥15 求学软件的前人们指明方向🥺
  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn