session-timeout 在 web.xml 中单位是分钟,非秒或毫秒;设为0或负数通常表示永不过期,未配置则使用容器默认值(如tomcat为30分钟);它仅控制服务器端 httpsession 失效时间,与 cookie 生命周期无关。

session-timeout 在 web.xml 里单位是分钟
不是秒,也不是毫秒,就是整数分钟。这是 Servlet 规范明确规定的,所有符合规范的容器(Tomcat、Jetty、WebLogic 等)都按分钟解析 session-timeout 的值。
常见错误现象:session-timeout 设成 300,以为是 5 分钟(对),但有人误设成 300000,结果会话 300000 分钟 ≈ 208 天才过期,远超预期。
- 值必须是正整数;设为
0或负数,多数容器(如 Tomcat)会视为“永不过期”,但行为不保证跨容器一致 - 如果没写
session-timeout,容器用自身默认值(Tomcat 默认是 30 分钟) - 该配置只影响通过
HttpSession创建的会话,不影响 JWT、Token 等无状态认证机制
它只作用于 HttpSession,默认不控制 Cookie 的 Max-Age
session-timeout 控制的是服务器端 HttpSession 对象的失效时间,和浏览器里 JSESSIONID Cookie 的存活时长是两回事。
典型混淆场景:改了 session-timeout 为 1(1 分钟),但用户刷新页面发现会话还在——很可能因为 Cookie 没设 Max-Age,仍是会话级 Cookie(关浏览器才删),服务器虽已销毁 session,但下次请求仍带旧 ID,容器会新建一个同名 session。
立即学习“Java免费学习笔记(深入)”;
- 要让 Cookie 同步失效,需手动配置 Cookie 的
Max-Age,例如在登录后调用response.getSession().getMaxInactiveInterval()拿到秒数,再设 Cookie - Servlet 3.0+ 可在
web.xml里用session-config/cookie/max-age统一配(单位是秒) - 注意:Cookie 的
max-age和session-timeout单位不同,前者秒,后者分钟,别直接抄同一个数字
代码里调用 setMaxInactiveInterval() 优先级更高
运行时调用 session.setMaxInactiveInterval(60)(单位是秒)会覆盖 web.xml 里的 session-timeout 设置,且只影响当前 session 实例。
容易踩的坑:setMaxInactiveInterval(-1) 表示该 session 永不过期,但仅限这个 session;而 web.xml 设 0 是全局默认行为,二者语义接近但作用范围不同。
- 若同时在
web.xml设30,又在登录后执行session.setMaxInactiveInterval(1800),那这个用户 session 就是 30 分钟(1800 秒) - Filter 或拦截器中反复调用
setMaxInactiveInterval()会不断重置倒计时,可能掩盖真实空闲问题 - 集群环境下,部分容器(如 Tomcat + Redis Session)可能不完全同步该值,建议统一用配置驱动
Spring Boot 用户别在 web.xml 里改,得换地方
Spring Boot 默认不生成 web.xml,session-timeout 配置得走 Spring 层面:用 server.servlet.session.timeout(单位是秒),不是分钟。
错误示范:在 application.properties 里写 server.servlet.session.timeout=30,以为是 30 分钟——其实是 30 秒,会话极短。
- 正确写法:
server.servlet.session.timeout=1800(对应传统 web.xml 的30) - 该配置底层仍调用
ServletContext.getSessionCookieConfig().setMaxAge()和ServletContext.getSessionTimeout(),最终影响一致 - 若用了 Spring Session(如 Redis),实际过期由后端存储控制,此处配置仅作 fallback 或初始化参考
真正麻烦的从来不是单位本身,而是「服务器 session 过期」「Cookie 自动删除」「前端定时登出提示」这三件事没对齐。只要有一环单位搞错、或逻辑没联动,用户就会遇到“明明登出了,换个页面又进来了”或者“刚填完表单就跳登录页”这种问题。










