从 Redis 中删除会话 (Django)

2024-03-13

我使用 Django 和 Redis 作为会话引擎(也是 Celery,但那是别的东西)。它运行完美,我可以看到速度的提高。

SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'

我有一个脚本每分钟运行一次,通过某些方法检查活动用户,如果用户在最近一分钟内没有活动,则会话将被删除。这样做是为了满足客户的跟踪需求。

在我切换到 Redis 作为会话引擎之前,该脚本一直运行良好。会话确实从数据库中删除,但没有从 Redis 中删除。我没有使用任何 Django 内置方法,而是使用我自己的函数:

def clean_sessions():
    stored_sessions = Session.objects.all()
    active_users = active_users(minutes=1)
    active_users_ids = [user.id for user in active_users]
    for session in stored_sessions:
        session_uid = session.get_decoded().get('_auth_user_id')
        if not session_uid:
            session.delete()
            continue
        if session_uid not in active_users_ids:
            user = User.objects.get(pk=session_uid)
            ## some code between ##
            session.delete()

我的问题是,如何从缓存中删除会话,以便用户实际上注销?


这不是很简单,但我能够解决它。我从 clean_sessions() 文件中导入了它:

from importlib import import_module
from django.conf import settings

然后,在函数内部,我加载了 SessionStore 对象:

SessionStore = import_module(settings.SESSION_ENGINE).SessionStore

从那里,删除会话非常容易,方法如下:

def clean_sessions():
    stored_sessions = Session.objects.all()
    active_users = Request.objects.active_users(seconds=15)
    active_users_ids = [user.id for user in active_users]
    for session in stored_sessions:
        SessionStore = import_module(settings.SESSION_ENGINE).SessionStore
        s = SessionStore(session_key=session.session_key)
        session_uid = session.get_decoded().get('_auth_user_id')
        if not session_uid:
            s.delete()
            continue
        if session_uid not in active_users_ids:
            ## some code ##
            s.delete()

从您使用的任何会话引擎加载正确的 SessionStore 非常重要,否则它将无法从两个位置(数据库和缓存)中删除它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Redis 中删除会话 (Django) 的相关文章

随机推荐

  • npm 已弃用警告 – 我需要更新某些内容吗?

    做完之后npm install为了获取项目的依赖项 我经常收到很多这样的消息 npm WARN deprecated email protected cdn cgi l email protection lodash lt 2 0 0 is
  • 多对多关联表上的 SQLAlchemy 关系

    我正在尝试建立与另一个多对多关系的关系 代码如下所示 from sqlalchemy import Column Integer ForeignKey Table ForeignKeyConstraint create engine fro
  • 构造函数技巧

    我认为这是不可能的 但我想在放弃之前问你一下 我想要类似 constexpr 增量的东西 include
  • PyCharm Django 上一个项目的服务器在打开并运行另一个项目后仍然运行

    重现问题的步骤 打开第一个项目 py 管理 py 运行服务器 现在我可以通过地址在浏览器中看到我的 Project 1 网站http 127 0 0 1 8000 http 127 0 0 1 8000 在 PyCharm 中关闭项目并打开
  • 强力查询中的匹配列表/表

    我认为这必须有一个简单的答案 但我找不到任何例子 我必须将列表的每个成员与子字符串列表进行比较 以查看该成员是否包含子字符串 如果包含 则将该子字符串返回到与第一个列表的成员位于同一位置的第三个列表 Example ListA help m
  • Ubuntu Nginx/Laravel 500 内部服务器错误

    当我尝试访问时说 Http localhost page我从 nginx 收到 500 内部服务器错误 500 Internal Server Error nginx 1 1 19就是页面上的全部内容 在日志文件中我收到此错误 2014 0
  • Java:startingPath 作为“public static final”异常

    已更新 对更改感到抱歉 但现在是真正的问题了 对于 getCanonicalPath 方法的异常 我无法在其中包含 try catch loop 我尝试先用方法解决问题 然后在那里声明值 问题是它是最终的 我无法更改它 那么如何将start
  • WPF ListBox 触发器不适用于 IsFocused 属性

    我想设计我的风格ListBox并显示一个Border周围 我想隐藏这个Border when ListBox获得焦点
  • 如何在不征求用户许可的情况下获取 Facebook 用户的公开信息?

    有没有一种方法可以在不征求用户许可的情况下获取用户的公开信息 在facebook中 我知道我们可以获取用户的基本信息 例如id 姓名 图片 性别和他的区域设置 但不是他的其他公开信息 而无需征求他的许可 看这个链接 http zesty c
  • 如何使用流畅的配置在 Entity Framework 6.2 中创建索引

    有没有办法使用流畅的配置在属性 列上创建索引 而不是使用新的IndexAttribute https msdn microsoft com en us library jj591583 v vs 113 aspx Anchor 10 那么
  • 如何让Java使用机器上的所有CPU资源?

    我有时用 Java 编写代码 我注意到有时它在多核机器上使用超过 100 的 CPU 我现在正在一台具有 33 个 CPU 亚马逊的 EC2 的多核机器上运行一些代码 我想让我的 Java 进程使用所有可用的 CPU 这样它将具有非常高的机
  • 跨平台一致的伪随机数

    我正在寻找一种生成伪随机数序列的方法 该方法将在任何平台上为给定种子生成相同的序列结果 我假设rand srand 不会是一致的 我的这个假设很容易是错误的 像一个Mersenne Twister 来自 Boost Random http
  • 如何在 glob() 模式中编写“或”?

    glob glob 不使用正则表达式 它使用 Unix 路径扩展规则 我如何在 glob 中模拟这个正则表达式 jpg png 很好glob你应该这样做 lst glob glob jpg glob glob png
  • SVN反向合并?

    我的 SVN 存储库在修订版 497 时非常完美 我执行了几次错误的提交 因此现在它处于修订版 HEAD 我发现要回滚 您应该使用如下命令 svn merge r HEAD 497 在工作目录中 并且工作目录位于 HEAD 修订版 但这是正
  • PHP 从字符串中获取搜索词数组

    有没有一种简单的方法来解析字符串以查找包括否定词在内的搜索词 this that the other thing but not this positive 会变成 array positive gt array this the othe
  • pytz 在 Mac 上安装

    Django 通知我 ImportError 没有名为 pytz 的模块 但是当我使用 pip 安装它时 我得到以下结果 Requirement already satisfied use upgrade to upgrade pytz i
  • MySQL通过数组中的键搜索json值

    我有一个 JSON 对象数组 想要返回一个特定的节点 为了简化我的问题 假设数组可能如下所示 Race Orc strength 14 Race Knight strength 7 例如 我想知道骑士的实力 功能JSON SEARCH ht
  • 通过函数打开流

    我需要有关不可复制性质的帮助 io f streams 我需要提供一个黑客包装fstreams 以便在 Windows 上处理文件名中包含 unicode 字符的文件 为此 我设计了一个包装函数 bool open ifstream ist
  • ImportError:在 apache 上安装 django mod_wsgi 配置中没有名为 django.core.handlers.wsgi 的模块

    我尝试安装 django 以与 apache 和 mod wsgi 一起使用 但出现此错误 ImportError No module named django core handlers wsgi 我读到这可能是用户错误 在控制台 ssh
  • 从 Redis 中删除会话 (Django)

    我使用 Django 和 Redis 作为会话引擎 也是 Celery 但那是别的东西 它运行完美 我可以看到速度的提高 SESSION ENGINE django contrib sessions backends cached db 我