【发布时间】:2020-08-14 06:50:53
【问题描述】:
当使用 Flask-Login 注销用户时,有没有办法注销用户可能拥有的所有会话(例如:在不同的浏览器、不同的设备等)?
【问题讨论】:
标签: python session flask session-cookies flask-login
当使用 Flask-Login 注销用户时,有没有办法注销用户可能拥有的所有会话(例如:在不同的浏览器、不同的设备等)?
【问题讨论】:
标签: python session flask session-cookies flask-login
正如 Artiom 在他的回答中所说,Flask-Login 默认使用客户端的 Flask 会话,您将无法从其他客户端删除所有这些 cookie。
但是,有一种方法可以阻止其他客户端登录。Flask-Login 依赖于user_loader 回调函数从缓存中获取用户,该函数在来自用户客户端的每个 HTTP 请求时被调用。
你可以做的是在注销时,从这个缓存中删除这个特定的用户。这样,当该用户使用的任何客户端(电话、其他浏览器等)尝试访问您的页面时。 Flask-Login 不会在缓存中找到用户,并将他们重定向到登录页面。
【讨论】:
Flask-Login 将 user_id 存储在 Flask 会话中,这是客户端会话,数据存储在用户浏览器的 cookie 文件中。在此您无法删除客户端所有设备和浏览器中的 cookie。
尽管如此,您可以在帮助下使用服务器端会话,例如Flask 的 Redis 和 Flask-Session 扩展。服务器端会话将解决同时为任何用户的浏览器或设备删除或操作(想象管理员授予或删除用户权限)用户会话的问题。
【讨论】: