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.