Подтвердить что ты не робот

Почему SESSION_EXPIRE_AT_BROWSER_CLOSE = Истинный журнал пользователя, когда браузер закрыт?

В соответствии с документацией Django, если для параметра SESSION_EXPIRE_AT_BROWSER_CLOSE установлено значение True, Django будет использовать куки файлы в браузере - файлы 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():
        ...

Что я делаю неправильно или что мне не хватает? Любые предложения?

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

4b9b3361

Ответ 1

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

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

Set-Cookie:sessionid=f4c06139bc46a10e1a30d5f0ab7773e2; Path=/

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

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

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

Ответ 2

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

  • Установить SESSION_EXPIRE_AT_BROWSER_CLOSE = True
  • Удалите строки в таблице django_session, чтобы очистить любые сеансы, которые могут вызвать путаницу. (delete from django_session)
  • Признать, что все окна и вкладки в вашем браузере должны быть закрыты, чтобы срок действия сессии истекал. Это поведение браузера; а не поведение Django.

Ответ 3

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

Ответ 4

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

delete FROM django_session