技术设计
背景
我们需要对当前的 session 添加一个过期的功能,因为对于一个 session 他是不可能一直存在于后端的,往往在用户浏览完页面关闭浏览器后他就会失效。
需求
所以对于一般用户访问页面的时间长短,一般在 15-30 min 之间,在我们的 NIO server 中,我会将服务器的默认的 session 的过期时间设置成为 30 min,并且支持可配置化的 session ,可以在 config.json 中自由配置 session 的过期时间,支持秒级别的配置。
总结起来需求就是
支持 session 过期
可配置化的 session 过期时间
具有默认的过期时间(30min)
实现
session 过期
主要有两种方式
开启线程去扫描 session 池中的 session:判断当前时间是否超过session 的过期时间,如果过期就将 session 从池中删除。
使用懒计算的方式实现:当请求进来的时候才去计算 session 的时间,如果到了过期时间,就从 session 池中删除,如果没有到,就会一直存在于 session 池中。
简单分析一下两个方案,第一种方案,简单粗暴,有一个缺点就是始终要启动一个线程去扫描。第二种方案,采用懒计算的方式,将计算分配到每一次请求,相较于第一个方式性能较好,但是会牺牲一定的一致性,
这边主要采用的是使用第二种方案实现一个 session 的过期的机制。
支持可配置化的 session 过期时间
在 config.json 中多添加一个字段 sessionTimeout,在默认的情况下 sessionTimeout = 1800 。每次 session 创建的时候都会根据当前时间加上 session 的过期时间来计算出 session 过期时间。
Last updated
Was this helpful?