Почему 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.
Ответы
Ответ 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