Такое поведение вызвано функцией в Webkit браузерах, неофициально называемой Page Cache , также известной как кэш назад / вперед.Он управляет тем, что происходит с предыдущими страницами в текущем сеансе просмотра.Webkit делает нечто особенное в том, что он «приостанавливает» предыдущие страницы.Как будто предыдущая страница скрыта в другой вкладке;нажатие кнопки «назад» похоже на вывод вкладки на передний план.Страница все еще там, как это было.Это означает, что сетевой запрос не выполняется, и поэтому логика вашего сервера никогда не затрагивается.
Такое поведение вы увидите и в Safari, и в Chrome.Посмотрите на панель Network Inspector и наблюдайте за сетевым трафиком, когда вы нажимаете back на страницу.На первый взгляд кажется, что был сделан запрос.Safari не помогает развеять мысль о том, что на самом деле не было сделано ни одного запроса.Chrome более вежлив и сообщает, что страница была загружена "(из кэша)".В Chrome посмотрите на столбец size или щелкните запрос и посмотрите код состояния на вкладке Headers .Конечно, другой показатель - это то, сколько времени потребовался «запрос» на временной шкале (вероятно, 0 мс).
Это объясняет поведение ... теперь, как его обойти.Лучшим решением может быть просто напоминание на странице выхода из системы для закрытия окна браузера.
Вы правильно определили, что на стороне Django ничего нельзя сделать.Декораторы кеша вам не помогут.К сожалению, кажется, что нет канонического ответа на предотвращение кеширования страницы в кэше страниц.Похоже, что это особенность Flux, поэтому решение теперь может быть просто взломом, который не будет работать на более поздних версиях Webkit.Или Firefox может создать аналогичную функцию с другой реализацией.
Обслуживание вашего сайта по HTTPS с cache-control: no-store
или cache-control: no-cache
может сделать это, но это наверняка тяжело.Одним из возможных способов взлома было бы установить обработчик событий unload/onunload
.
Подробнее о поведении кэша страниц и предложении по взлому выгрузки в этих двух статьях Safin для Surfin '.
ОБНОВЛЕНИЕ - @DigitalCake обнаружил, что Cache-Control:no-store
имеет некоторый эффект.В Django это достигается с помощью @cache_control(no_store=True)
, украшающей вид.no store
работает в Chrome (v17.0.963.66) - страница не спрятана в кеше страницы, а кнопка «назад» вызывает сетевой запрос.no store
не работает не работает в Safari (v5.1.3).Это показывает, что даже в браузерах Webkit Page Cache реализован по-разному.Это также демонстрирует тот факт, что текущие обходные пути, вероятно, будут временными хаки.