0%
需求
解决方法
- 修改flask session(保存在内存中)存储到redis
- 参考flask_session 修改save_session,只在用户登录时存储当前session到redis(避免其他访问存储session)
- 在用户登录的接口中,清除当前用户存储在redis中的其他session
- 用户每次访问判断当前用户session和redis中是否一致,实现同一个账号只能一处登录
插件
- flask_login
- flask_session(参考)
flask_login 记住帐号访问
- 携带session(remember_token包含用户id)发送请求
- 通过用户id加载用户 @login_manager.user_loader 数据库获取用户信息
同一个账号一处登录
- 管理系统后台使用flask
- 存储用户session使用redis
- 参考flask_session
- 登录时判断当前用户的session和redis这个用户的session的值是否相同,相同则删除redis的其他session(保证一个帐号,同一时间只能一个在线)
- 保存此次登录用户的session
- save_session只保存登录session,登出logout_user会清除当前用户的session
记住帐号
- 默认使用
- 在@login_manager.user_loader中查询当前用户的session是否在redis session中
- 如果session失效(浏览器关闭、登出),记住功能失效,需要重新登录
思考
- 总体来说根据自己的需求和想法,修改了flask_session和用户登录接口
- flask_session会不会有更好的解决方法
- session和token都存在安全问题,简单的可以采用请求签名认证,最好的使用https