Почему SESSION_EXPIRE_AT_BROWSER_CLOSE = True выйти из системы, когда браузер закрыт? - PullRequest
23 голосов
/ 20 октября 2010

Согласно документации Django, «если для SESSION_EXPIRE_AT_BROWSER_CLOSE задано значение True, Django будет использовать файлы cookie длины браузера - файлы cookie, срок действия которых истекает, как только пользователь закрывает свой браузер. Используйте этот параметр, если вы хотите, чтобы люди входили в систему. каждый раз, когда они открывают браузер. "

И это то, что я сделал, добавив следующую строку в мой файл settings.py (и перезапустив сервер):

# Close the session when user closes the browser
SESSION_EXPIRE_AT_BROWSER_CLOSE = True

Затем я вошел на страницу, которая проверяет, аутентифицирован ли пользователь, и затем закрыл браузер. Когда я снова открываю свой браузер и захожу на ту же страницу, он не запрашивает имя пользователя и пароль, потому что он, по-видимому, проходит следующий тест:

def check_teacher(request):
    result = {}
    if request.user.is_authenticated():
        ...

Что я делаю не так или что мне не хватает? Есть предложения?

Я использую пре-альфа SVN-13858 Django версии 1.3 в моей системе Ubuntu GNU / Linux 10.10 и запускаю приведенный выше пример с использованием сервера разработки Django.

Ответы [ 4 ]

21 голосов
/ 20 октября 2010

Закрытие вкладки или окна не считается закрытием браузера.Убедитесь, что вы закрыли программу браузера, чтобы завершить сеанс браузера.

Если это не помогает, используйте FireBug в Firefox или Web Inspector в Safari, чтобы дважды проверить заголовки в ответе на исходное обращение к странице.Начальное попадание на страницу может быть одной из многих вещей;при первом открытии браузера, при выходе из системы или сразу после очистки куки.С SESSION_EXPIRE_AT_BROWSER_CLOSE = True вы должны увидеть что-то подобное в заголовке:

Set-Cookie:sessionid=f4c06139bc46a10e1a30d5f0ab7773e2; Path=/

И когда SESSION_EXPIRE_AT_BROWSER_CLOSE = False будет добавлено значение expires=...:

Set-Cookie:sessionid=a532f3d7dc314afc58e8f676ed72280e; expires=Wed, 03-Nov-2010 17:08:45 GMT; Max-Age=1209600; Path=/

Если у вас естьтрудно увидеть заголовок Set-Cookie из-за перенаправлений, вы можете попробовать использовать django-debug-toolbar , чтобы разбить перенаправления на несколько страниц.

6 голосов
/ 31 августа 2013

@ istruble и @haasfsafas оба являются правильными. Решение для

  1. Набор SESSION_EXPIRE_AT_BROWSER_CLOSE = True
  2. Удалите строки в таблице django_session, чтобы очистить все сеансы, которые могут вызвать путаницу. (delete from django_session)
  3. Признайте, что все окна и вкладки в вашем браузере должны быть закрыты для истечения сеанса. Это поведение браузера; не поведение Джанго.
1 голос
/ 07 сентября 2011

Изменение не вступит в силу, если вы не запустите manage.py syncdb снова.

0 голосов
/ 29 мая 2012

Вы должны очистить сеансы в БД:

delete FROM django_session
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...