как остановить браузер от кеширования динамического контента - PullRequest
0 голосов
/ 20 января 2012

У меня есть сгенерированные php страницы, которые меняются каждые несколько минут в зависимости от базовых данных.Все хорошо, пока пользователь не перейдет по ссылке.Когда пользователь нажимает кнопку «Назад» в своем браузере, чтобы вернуться, отображается ранее загруженная версия страницы.Браузер не перезагружает страницу с сервера.

Чтобы получить новый контент с сервера, пользователи должны нажать перезагрузить.

Я попробовал обычные метатеги и вывел заголовок () с php.

Поведение одинаково в IE, FF и Chrome.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 
  Transitional//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="pragma" content="no-cache">

Ответы [ 2 ]

2 голосов
/ 20 января 2012

Попробуйте установить эти заголовки

header("Cache-control: no-store, no-cache, must-revalidate");
header("Expires: Mon, 26 Jun 1997 05:00:00 GMT");
header("Pragma: no-cache");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");

Это говорит браузеру, что он не должен кэшировать страницу, и поэтому он должен перезагрузиться при ответном ударе.

0 голосов
/ 10 марта 2019

Не существует ОДНОГО решения для всех браузеров.

Независимо от того, какие заголовки вы используете, некоторые браузеры, кажется, всегда кешируют!

Я только что придумал это решение, которое искал сам,Он все время смотрел мне в лицо.

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

Это решение удивительно простое и требует мало опыта для реализации.

Я использую php, но я верюПеременные URL могут использоваться с asp, javascript и многими другими

Ваш браузер видит http://example.com/index.php, http://example.com/index.php?x=32 и http://example.com/index.php?x=3199 как разные URL, поэтому он не будет использоватьлюбой из приведенных выше URL-адресов в качестве кэша для другого.

Я генерирую случайное число в PHP, которое вы, вероятно, можете сделать в ASP

в php, который я использую:

$rand=(rand(1, 99999));

Теперь моя ссылка на PHP (должна быть проста для понимания даже при ограниченном PHP)

'<a href="http://example.com/index.php?rand='.$rand.'>"

Если на странице уже есть переменные URL, мы добавляем ее в любые формы GET или сцепленные ссылки.

Если формы являются почтовыми формами, мы помечаем их по URL-адресу «action», поэтому

http://example.com/index.php 

становится

http://example.com/index.php?rand=<?php echo $rand;?>

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

http://example.com/index.php?rand=4398 в следующий раз, когда мы загрузим ту же страницу, браузер считает, что это другая страница из-за другой переменной rand = URL.

Не беспокойтесь, нам никогда не придется ее читатьЭто только для того, чтобы "обмануть" браузер.В следующий раз, когда мы перейдем на ту же страницу, мы, скорее всего, увидим совсем другое число

http://example.com/index.php?rand=55468

или, что касается вашего браузера, НЕ ту же страницу, даже если мыполностью отбросьте переменную обратно на сервер, то есть она не имеет значения в вашем ASP или PHP и никогда не используется в качестве переменной.

Ответ теперь настолько прост, что я удивлен, что потратил на это несколько недель, и ничего не работало согласованно,ЭТО ДЕЛАЕТ!

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