flask-login 的一些问题

2017-07-07 10:05:35 +08:00
 ChangHaoWei

flask-login 怎么确保用户登陆后,从异地登陆就会把上一次登陆的状态失效?

1484 次点击
所在节点    Python
2 条回复
pekingzcc
2017-07-07 15:36:04 +08:00
flask-login 中有个 Session Protection 机制,主要是针对 session 篡改或偷盗,默认有两种模式,basic 和 strong,默认是 basic 模式。这个机制的实现是这样的:每一个请求过来时,会针对用户端产生一个对应的标识符(一般是 hash(ip+user-agent)),如果这个 session 没有标识符,会做存储,如果有,比对成功的话,这个 request 就是成功的。basic 模式与 strong 模式区别在于:basic 模式下,如果发现 session 比对标识符不成功,这个 session 会被标记为 non-fresh,而在 strong 模式下,整个 session 直接删除
ChangHaoWei
2017-07-07 22:06:23 +08:00
@pekingzcc 谢谢,I have figured it out。 我的解决方案是这样的,session 在请求上下文里是 client session,他会在处理后存在用户的 cookies 里面,而 login_user 操作会生成以登陆用户 ip 和 useragent 为原始数据的 sha256 字符串。存在 session[_id].

我的操作是在 login_user 操作后将当前登陆的时间写到 session 里面,并将登陆时间写到 server session (我是用的 mongodb ),因为以前登陆的用户的 session 中的登陆时间值是上次登陆的,,不匹配那就登陆状态失效喽。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/373654

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX