#python #django #authentication #session #middleware
#python #джанго #аутентификация #сеанс #промежуточное программное обеспечение
Вопрос:
Я использую Django 2.2 и пытаюсь определить, подключен ли пользователь, когда пользователь закрывает свой браузер, не выходя из системы. Я пытался использовать некоторые пакеты Django, такие как qsessions, но их нужно заменить 'django.contrib.sessions.middleware.SessionMiddleware',
промежуточным программным обеспечением qsession, но это приводит к другой ошибке django.contrib.sessions.middleware.SessionMiddleware not found
. Мне нужна ваша помощь, чтобы получить каждый сеанс пользователя отдельно.
Ответ №1:
Сеансы Django не предназначены для запроса их содержимого. Идентификатор пользователя в сеансе может быть декодирован из сеанса, но вам нужно выполнить итерацию по всем сеансам:
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)
Этот подход будет работать, но не будет эффективным, если в вашей базе данных много сеансов.
Комментарии:
1. Спасибо, Стефан, за ваш ответ, но если эта функция может замедлить работу веб-сайта, так какой способ хорошо работает без пользовательских сеансов, которые используются в приложении чата?