SessionStorage适用于单次页面会话的临时权限状态存储,如角色、功能开关、Token过期时间等非敏感标识,需配合服务端鉴权,及时清理更新并校验有效性,且不跨标签页共享。

SessionStorage 适合存储单次页面会话内的临时权限状态,比如登录后缓存用户角色、接口访问令牌(短期)、菜单可见性等,但不能替代服务端鉴权,仅作前端体验优化和轻量状态同步。
权限数据存什么、怎么存
只存客户端可公开、无需强保密的权限标识,例如:
-
用户角色类型:如
"role": "admin"或"role": "editor" -
功能开关标记:如
"canDeletePost": true,由登录响应或权限接口返回后写入 -
临时 Token 片段(非完整 token):如仅存
"tokenExpireAt": 1735689200000用于本地过期判断
避免存密码、完整 JWT、敏感字段(如用户身份证、手机号)。写入时用 sessionStorage.setItem(key, JSON.stringify(value)),确保结构化数据可读可维护。
权限变更时及时同步
用户在当前会话中切换角色、登出重登、或被后台强制下线时,必须主动清理或更新 sessionStorage:
- 登出操作执行
sessionStorage.clear()或逐项removeItem() - 角色升级/降级后,重新调用权限接口,并覆盖原有
sessionStorage条目 - 监听全局事件(如自定义
auth:changed),触发权限缓存刷新逻辑
读取权限前务必校验有效性
每次读取前检查是否存在、是否过期、格式是否合法,不盲目信任本地存储:
- 用
JSON.parse(sessionStorage.getItem('role'))并包裹try...catch防止解析失败 - 对比当前时间与
tokenExpireAt,过期则清空并跳转登录页 - 组件渲染前做守卫判断,例如:
v-if="userRole === 'admin'"前先确认userRole已存在且有效
注意跨标签页不共享的特性
SessionStorage 是标签页隔离的,新开 Tab 或窗口不会继承原会话权限。若需多页协同权限状态,应:
- 依赖服务端 Session + Cookie 自动续签,前端仅做轻量缓存
- 用
localStorage+storage事件广播变更(但要注意安全性权衡) - 对关键操作(如提交、删除)始终向服务端二次校验权限,不依赖任何前端存储
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











