Django Sessions, SESSION_EXPIRE_AT_BROWSER_CLOSE не изменяет дату истечения срока действия сессии

Я установил

SESSION_EXPIRE_AT_BROWSER_CLOSE = True

в моем settings.py и он работает нормально.

Проблема заключается в том, что когда пользователь закрывает браузер, он выходит из системы, но в экземпляре сессии, связанном с этим пользователем,

expire_date

поле не изменяется.

У меня есть кусок кода для перечисления всех активных сессий.

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

sessions = Session.objects.filter(expire_date__gte=timezone.now())
uid_list = []

for session in sessions:
    data = session.get_decoded()
    uid_list.append(data.get('_auth_user_id', None))
    print("#", uid_list[-1])

Вывод кода содержит идентификатор пользователя, вышедшего из системы.

Базовый класс сессии является:

class AbstractBaseSession(models.Model):
session_key = models.CharField(_('session key'), max_length=40, primary_key=True)
session_data = models.TextField(_('session data'))
expire_date = models.DateTimeField(_('expire date'), db_index=True)

objects = BaseSessionManager()

class Meta:
    abstract = True
    verbose_name = _('session')
    verbose_name_plural = _('sessions')

def __str__(self):
    return self.session_key

@classmethod
def get_session_store_class(cls):
    raise NotImplementedError

def get_decoded(self):
    session_store_class = self.get_session_store_class()
    return session_store_class().decode(self.session_data)

Вопрос в том, как узнать, закрыл ли пользователь браузер и вышел из системы.

Это сделано специально, так как пользователь, закрывающий свой браузер, никак не может сообщить о чем-либо Django.

SESSION_EXPIRE_AT_BROWSER_CLOSE просто означает, что срок действия cookie, который браузер отправляет Django, истекает при закрытии браузера, и поэтому следующая сессия просмотра не будет связана с той же самой сессией Django.

Вернуться на верх