前言
这个问题是最近的一个老项目 碰到的一个问题
假设 我现在在同一个页面, 刷新一下页面, 加载完毕之后, 再刷新一下页面
然后 可以看到的是两次刷新页面所发送的请求, 携带的 JSESSIONID 不一样, 然后 导致了 服务端这边使用 session 相关特性失效
然后 这里我们就是来看一下 处理的原因
首先项目是引入了 spring-security, 然后 进而导致的这个问题
情况如下, 以红线作为 第一次 和 第二次 相关网络请求的分隔符
然后可以看到的是 第一批次的请求中携带的 JSESSIONID 均为 “4415237FB3237945BB3103BCB187F5F3”
然后 响应了一个 set-cookie 的响应头, 告诉客户端这边重新更新 cookie, 第一批次的请求的所有响应里面都有这个 set-cookie, 并且每一个 set-cookie 中的 JSESSIONID 不一
第二个批次的请求如下, 可以看到携带的 JSESSIONID 为 “9142F6629C4D076207C283CD8A103BC9”
然后 客户端这边挑选的是 上面的 ”/serviceStatsByLv2” 的 JSESSIONID 进行设置, 当然 这个挑选是由浏览器这边来控制的, 我们暂时不关心这个问题
然后第二批次的这批请求, 基本上都有 set-cookie 的响应头
按照 我们的通常的 web 经验的理解, 一个 session 应该是有一定的生命周期的, 为啥这里每一批次请求 就会切换 JSESSIONID 呢??
这是和 spring-security 中的一个 SessionManagementFilter 有关系