前段时间在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才是我们最后设置的过期时间。

解决办法:

  1. 等待旧session过期后,重新生成session。
  2. 重新打开浏览器,再调用接口。

个人理解,如果错误,欢迎指正。

更多推荐