【问题标题】:how to communicate between different sessions in flask如何在烧瓶中的不同会话之间进行通信
【发布时间】:2019-08-23 14:27:53
【问题描述】:

这里是一个应用案例,我的描述是简化的。

这里有 3 个网站角色:管理员、版主和访问者

管理员可以控制一切,版主管理网站的某些部分,访问者可以发布线程和阅读线程

用户、角色和权限的关系以 RBAC 样式存储在数据库中

现在管理员想将版主降级为访问者,在数据库中操作很容易。

但如果执行此操作时版主仍然在线,则会出现问题。

admin 和 moderator 有两个不同的 session,为了加快网站速度,一般我们把角色和权限放在 session 中,不会在每次用户发送请求时都查询,所以 admin 的操作不会修改版主的会话。一旦主持人会话未过期,主持人仍然拥有权限。

所以基本要求是如何通过 Web 服务中的另一个会话来操作一个会话。

我的网站是基于 python 的。因为需要RBAC,所以比起django我更喜欢flask

django.auth 模块可以控制每个模型的访问权限,但是我们要控制的是api/url而不是模型。因为 rest_framework.authentication.TokenAuthentication 基于 django.auth,如果我们放弃 django.auth,我们必须开发自己的令牌处理程序来击败 CSRF,但我不想要更多的工作量。

所以我的问题是:如何处理这种情况? web服务中不同会话之间如何通信或操作,尤其是flask或django

如果flask能解决这个问题,我会感觉更好。或者基于django的解决方案也可以。

【问题讨论】:

    标签: python session flask


    【解决方案1】:

    如果从数据库加载用户会减慢您的应用程序的速度,那么我认为它的负载很重,使用 Redis 服务器会加快速度。您可以将其用于:

    1. 在 Redis 中创建数据结构(例如:哈希)来存储用户信息。从 Redis 加载用户要快得多。当您在数据库中创建/更新用户时,您也必须修改 Redis 中的数据。这样,所有用户角色和权限都将是最新的。
    2. 使用Flask-Session 创建服务器端会话。所有会话数据都保存在服务器上,用户获得访问它的密钥。如果您删除服务器上的密钥,会话将被删除,用户将不得不再次登录。

    但我认为从数据库加载用户是最好的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-17
      • 1970-01-01
      • 2017-08-10
      • 2015-03-01
      • 2021-10-09
      • 2013-09-13
      相关资源
      最近更新 更多