SpringBoot设置Session失效时间
- SpringBoot设置Session失效时间
- 先别急着关,你是不是也被这样的重复信息洗脑了?到底是怎么个失效机制呢?根本没解释清楚嘛!
- 今天,我就来讲一讲我的经验!
- 一、一些准备
- 1.监听器代码
- 2.注册监听器代码
- 二、时间计算
- 1.最初测试(销毁时间80秒)
- 1.1测试1
- 创建时间和销毁时间:12:03:59和12:05:50
- 相差时间:111秒
- 1.2测试2
- 创建时间和销毁时间:12:06:03和12:07:50
- 相差时间:107秒
- 2.最终测试(销毁时间10秒)
- 2.1测试1
- 我等了将近2分钟!
- 创建时间:12:11:28
- 销毁时间:12:13:27
- 相差时间:119秒
- 猜测:
- 2.2测试2
- 创建时间:12:19:48
- 预测销毁时间:12:21:27
- 真实销毁时间:12:21:27
- 2.2测试3
- 创建时间:12:22:11![在这里插入图片描述](https://s2.51cto.com/images/blog/202310/14133529_652a28a16dc2d36714.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
- 预测销毁时间:12:23:27
- 真实销毁时间:12:23:27
- 三、结论
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 }
这里引用的链接是
先别急着关,你是不是也被这样的重复信息洗脑了?到底是怎么个失效机制呢?根本没解释清楚嘛!
今天,我就来讲一讲我的经验!
一、一些准备
要弄懂这个问题,首先需要配置一个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
相差时间:111秒
1.2测试2
创建时间和销毁时间: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
相差时间: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
2.2测试3
创建时间:12:22:11
预测销毁时间:12:23:27
真实销毁时间:12:23:27
三、结论
就是之前的猜测