如何使用 Django 会话检测用户是否仍然在线

How to detect if user is still online with django session

我使用 Django 2.2 并尝试检测当用户关闭浏览器但未注销时用户是否仍处于连接状态 我尝试使用一些像 qsessions 这样的 Django 包,但它需要用 qsession 中间件替换 'django.contrib.sessions.middleware.SessionMiddleware', 但它会产生另一个错误 django.contrib.sessions.middleware.SessionMiddleware not found 我需要你的帮助来分别获取每个用户会话。

Django 会话不应该被查询其内容。 session中的user id可以从一个session中解码出来,但是需要遍历所有session:

from django.contrib.sessions.models import Session
from django.utils import timezone

def get_unexpired_sessions_for_user(user):
    user_sessions = []
    all_sessions = Session.objects.filter(expire_date__gte=timezone.now())
    for session in all_sessions:
        session_data = session.get_decoded()
        if user.pk == session_data.get('_auth_user_id'):
            user_sessions.append(session.pk)
    return Session.objects.filter(pk__in=user_sessions)

此方法可行,但当您的数据库中有大量会话时性能不佳。