应通过后端返回401状态码或自定义code=401信号感知session过期,在全局响应拦截器中统一处理:清除本地凭证、跳转登录页并支持回跳;辅以路由守卫快速过滤非法访问,配合可选保活接口主动探测,并提供模态框式友好提示实现优雅降级。

JavaScript 本身不直接管理 Session,Session 生命周期由后端控制。前端要实现“Session 过期后的优雅降级跳转”,核心是**感知过期信号 + 统一拦截响应 + 友好引导用户**,而非主动判断 Session 是否过期。
监听后端返回的会话失效状态码
这是最可靠的方式。后端应在 Session 失效时,对非登录接口统一返回明确标识(如 HTTP 状态码 401 Unauthorized 或自定义 JSON 字段 { "code": 401, "msg": "登录已过期" })。
建议在全局请求拦截器(如 Axios 的 response.interceptors)中处理:
- 检查响应状态码是否为 401;
- 或解析响应体,判断
code === 401或data?.code === 401; - 命中后,清除本地可能残留的 token / 用户信息(如
localStorage.removeItem('token')); - 跳转至登录页,并可附带提示(如 URL 参数
?redirect=/order/list,便于登录后回跳)。
配合后端心跳/保活接口做前置预判(可选增强)
仅靠 401 响应是被动的,用户点击按钮才触发跳转,体验略滞后。可加一层主动感知:
- 前端定时(如每 15 分钟)调用一个轻量保活接口(如
/api/auth/keepalive); - 若该接口返回 401 或超时,立即触发登出流程;
- 注意:保活接口必须无副作用、不刷新 Session 过期时间(否则失去检测意义),且需后端明确支持。
拦截所有受保护路由,避免白屏或报错
单页应用中,用户可能直接输入 URL 访问需登录的页面。此时不能等接口报错才跳转,而应在路由守卫中提前校验:
- 从 localStorage / sessionStorage 中读取 token 或登录态标记;
- 若不存在或明显无效(如格式错误、过期时间字段已过期),直接重定向到登录页;
- 注意:仅靠前端时间戳判断过期不可靠(客户端时间可能不准),此步仅作快速过滤,最终仍以 401 响应为准。
提供用户友好的过渡提示(非强制跳转)
对正在编辑表单、查看长页面的用户,突然跳转登录页易丢失操作。可优化为:
- 收到 401 后,不立即跳转,而是弹出模态框:“登录已过期,请重新登录以继续操作”,含“去登录”和“稍后再说”按钮;
- 点击“去登录”再跳转;点击“稍后再说”可暂时保留当前页(但后续接口仍会 401,需再次拦截);
- 若用户关闭模态框后尝试提交,仍拦截并再次提醒,形成温和降级。
不复杂但容易忽略的是前后端约定一致性——状态码、错误结构、保活机制必须双方对齐。只要后端给出清晰信号,前端拦截+清理+跳转+提示这一套链路就能稳定运行。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











