如何使用 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)
此方法可行,但当您的数据库中有大量会话时性能不佳。
我使用 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)
此方法可行,但当您的数据库中有大量会话时性能不佳。