【发布时间】:2021-11-24 08:31:18
【问题描述】:
我正在为网站开发用户会话管理。流程:
- 会话不存在/无效,前端将用户引导至登录页面
- 用户登录
- 后端在其数据库中创建会话
- 后端创建会话 ID cookie
- 前端在每个身份验证请求中传递会话 ID cookie
我的问题:前端如何知道会话是否不存在/无效?需要处理用户更改密码的情况,然后他们跨设备的所有会话都被撤销。所以前端需要以某种方式检查后端。
可能的方法:
-
后端提供了一个 GET /session API,它告诉 session 是否处于活动状态。前端在每个请求之前调用它,如果会话不活动,则重定向到登录。但这似乎有很多额外的要求。
-
每次浏览器加载网站时,前端都会调用 GET /session (CTRL-R)。如果会话在经过身份验证的页面上无效,则页面在重新加载之前将无法工作,这将进入登录。如果未经身份验证的页面和经过身份验证的页面完全分开,这可能就足够了。
-
如果会话处于非活动状态,后端 API 会返回 HTTP 401。当前端看到时,它会引导用户登录。这比 #2 更实时,不需要额外的 GET /session 请求。我不知道这是否有任何我没有看到的问题。
哪种方法最好?
【问题讨论】:
标签: session session-management