SpringBoot设置Session失效时间——为什么设置10秒后要等1分多钟?!

SpringBoot设置Session失效时间

1 #Session超时时间设置,单位是秒,默认是30分钟
2 server.session.timeout=10

然而并没有什么用,因为SpringBoot在TomcatServletWebServerFactory代码中写了这个

1 private long getSessionTimeoutInMinutes() {
2         Duration sessionTimeout = this.getSession().getTimeout();
3         return this.isZeroOrLess(sessionTimeout) ? 0L : Math.max(sessionTimeout.toMinutes(), 1L);
4     }

这里引用的链接是https://www.cnblogs.com/fanqisoft/p/10658070.html

先别急着关,你是不是也被这样的重复信息洗脑了?到底是怎么个失效机制呢?根本没解释清楚嘛!

今天,我就来讲一讲我的经验!

一、一些准备

要弄懂这个问题,首先需要配置一个Session的监听器,并把他注册到SpringBoot的容器中,用来监听Session何时被创建,又何时被销毁

1.监听器代码
public class MyListener implements HttpSessionListener {
    @Override
    public void sessionCreated(HttpSessionEvent se) {
        System.out.println("创建session" + new Date());
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        System.out.println("销毁session" + new Date());
    }
}
2.注册监听器代码
@Configuration
public class MySpringMvcConfigurer {
    /**
     * 注册监听器Listener
     * @return
     */
    @Bean
    public ServletListenerRegistrationBean myListener() {
        ServletListenerRegistrationBean bean = new ServletListenerRegistrationBean(new MyListener());
        return bean;
    }
}

这个时候,启动SpringBoot的时候,就可以监听Session的创建和消失了。

二、时间计算

1.最初测试(销毁时间80秒)

我是怎么找到规律的呢,是我先进行了两次测试,发现一件事:销毁时间的秒数是固定的!

此次测试的销毁时间我填的80秒。

server.servlet.session.timeout=80
1.1测试1
创建时间和销毁时间:12:03:59和12:05:50

12:03:59和12:05:50

相差时间:111秒
1.2测试2
创建时间和销毁时间:12:06:03和12:07:50

12:06:03和12:07:50

相差时间:107秒

就是经过这两个测试,我开始怀疑,他的销毁时间不是固定的,而是和监测时间有关!

2.最终测试(销毁时间10秒)

带着这样的疑问,我把销毁时间改为了10秒并准备进行第二次测试。

server.servlet.session.timeout=10
2.1测试1
我等了将近2分钟!
创建时间:12:11:28

这个忘了截图了。但是应该是这个时间没错了,因为我记得很清楚,是刚重启成功就登录的,创建的session!

销毁时间:12:13:27

12:13:27

相差时间:119秒
猜测:

应该能确定,本次的监测时间是每分钟的27秒,这大概就是我成功启动服务器的时间的秒数。

而,按照现在的情况来看,不难猜测,他开始计时的时间,也是每轮监测时间的时候,也就是说,我这次测试,他是12:12:27的时候才开始倒计时10秒,然后在12:13:27的时候,发现时间已经减到<10了,就此销毁session

这样想的话,只需进行两次测试,一次27秒前,一次27秒后,看预测时间是否正确就行了!

(因为这个原因,甚至你设置1秒和59秒都没有区别的!不过他的前后误差绝对不会超过2分钟就是了!)

2.2测试2
创建时间:12:19:48

啊这,忘了截图。。。。

预测销毁时间:12:21:27
真实销毁时间:12:21:27

12:21:27

2.2测试3
创建时间:12:22:11在这里插入图片描述
预测销毁时间:12:23:27
真实销毁时间:12:23:27

在这里插入图片描述

三、结论

就是之前的猜测

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值