前段时间在CSDN上看到一帖子 SpringBoot 2设置session过期时间生效后再修改不生效,然后就去试了一下,开始我设置的时间session过期时间是两分钟。
server:
servlet:
session:
timeout: PT2M
接口
@RequestMapping(value = "v1")
public void v1(HttpServletRequest request) {
int max = request.getSession().getMaxInactiveInterval();
String id = request.getSession().getId();
System.out.println("max: " + max + " sessionId: " + id);
}
输出:
max: 120 sessionId: D44E9933E48AF7A60161BC0F6D270BA3
然后将过期时间改成3分钟,然后重启项目:
server:
servlet:
session:
timeout: PT3M
调用接口输出:
max: 120 sessionId: DB9734ED5F72F098A138E09580CA9A9B
当我百思不得其解的时候,又把浏览器刷新了一遍,发现输出的session过期时间已经变成180了。仔细看了一下sessionId,已经不是上次那个id了。
那就说明上个session已经过期了,然后又重新生成了一个新的session,并且使用的过期时间是我们配置的。
结论:设置session过期时间并浏览器调用接口,再重新调整session过期时间重启项目,再次调用接口session过期时间不会变,则需要等待该session过期后,重新生成的session才是我们最后设置的过期时间。
解决办法:
- 等待旧session过期后,重新生成session。
- 重新打开浏览器,再调用接口。
个人理解,如果错误,欢迎指正。