2010-11-12 3 views
2

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

Я пробовал следующее, но он не работает, поскольку я все еще могу вернуться назад и увидеть кешированную копию. Вот что я использую до сих пор.

header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 
    header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past 

ответ

5

Вы пробовали что-то более полное?

Expires: Sat, 26 Jul 1997 05:00:00 GMT 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma: no-cache 

Источник: http://www.php.net/manual/en/function.session-cache-limiter.php

+0

@kijin, я пробовал это, но если я ничего не понимаю, я все равно могу вернуться и посмотреть защищенную страницу. Даже с вашим «всеобъемлющим» примером, по-прежнему, похоже, кеширование результатов. – jim

+0

Я также должен отметить, что если я попытаюсь вернуться с помощью Chrome, я не смогу это сделать. Кажется, что мне не нужны какие-либо функции заголовка с Chrome. – jim

+0

@jim Какие другие браузеры вы тестируете, помимо Chrome? Вы пытались очистить кеш браузера? – kijin

0

Я не уверен, если это будет работать для всей страницы, но это стоит выстрел.

Мы обслуживаем динамические изображения, которые имеют одно и то же имя файла, снова и снова. Очевидно, что кеширование этих изображений было бы плохим, плохим, плохим (и полностью сломать наше приложение, действительно).

Итак, мы посылаем эти три заголовки в браузер, и он работает здорово, чтобы полностью устранить все кэширование изображений на всех браузерах:

//Prevent the image from caching, so it is created fresh each time. 
app.Response.AddHeader("pragma", "no-store,no-cache"); // //HTTP 1.0 
app.Response.AddHeader("cache-control", "no-cache, no-store, must-revalidate, max-age=-1"); // HTTP 1.1 
app.Response.AddHeader("expires", "Mon, 14 Jul 1789 12:30:00 GMT"); // Date in the past 

Примечание: Мы протестировали МНОГО вариантов, но они были тремя основными ингредиентами в волшебном рецепте, чтобы предотвратить кеширование на стороне клиента. Возможно, вам удастся использовать их для всей страницы, но я не тестировал этот сценарий.