session - 前端应该如何检查会话?
问题描述
我正在为网站开发用户会话管理。流动:
- 会话不存在/无效,前端将用户引导到登录页面
- 用户登录
- 后端在其数据库中创建会话
- 后端创建会话 ID cookie
- 前端在每个请求中传递会话 ID cookie 以进行身份验证
我的问题:前端如何知道会话是否不存在/无效?需要处理用户更改密码的情况,然后他们跨设备的所有会话都被撤销。所以前端需要以某种方式检查后端。
可能的方法:
后端提供了一个 GET /session API,它告诉 session 是否处于活动状态。前端在每个请求之前调用它,如果会话不活动,则重定向到登录。但这似乎有很多额外的要求。
前端在网站的每个浏览器加载时调用 GET /session (CTRL-R)。如果会话在经过身份验证的页面上无效,则页面在重新加载之前将无法工作,这将进入登录。如果未认证和已认证页面完全分开,这可能就足够了。
如果会话处于非活动状态,后端 API 会返回 HTTP 401。当前端看到时,它会引导用户登录。这比 #2 更实时,不需要额外的 GET /session 请求。我不知道这是否有任何我没有看到的问题。
哪个是最好的方法?
解决方案
前端不应处理任何会话管理逻辑。这样做完全是后端的责任。前端应该只对后端响应的内容做出反应。选项 3 将是理想的解决方案。这将确保一致性和安全性。
推荐阅读
- webpack - webpack.config:包含参数
- for-loop - HuBL:在 for 循环外使用 for 循环变量
- reactjs - 物化下拉菜单不适用于 reactjs
- laravel - 当控制器中的 __construct 方法时,JWT Auth 不起作用
- python - 如果值列表中的一个在行中匹配,如何将字典的键“反向映射”到行?
- java - 我可以在java中为这个帕斯卡三角形做一个更快的递归吗?
- java - 无法在 kubernetes 上生成 kafka 消息
- php - 如何在 laravel 迁移中创建格式 YYYY-MM-DDTHH:MM:SS+HH:MM?
- ag-grid - 如果 Angular 有任何版本升级,我是否需要将我的 ag-grid 升级到较新的版本?
- google-cloud-platform - 如何使用脚本或 API 在项目之间导出和导入谷歌云监控仪表板?