Я пробовал каждую комбинацию и перестановку мета-тегов, которые должны были остановить кеширование страницы, но Firefox STILL кэширует страницу! Мне просто нужен URL-адрес для перезагрузки, когда пользователь нажимает кнопку «Назад». Прекрасно работает в IE8.
Я пробовал все это …
<meta http-equiv="Cache-Control" content="no-store" /> <meta http-equiv="Pragma" content="no-cache"/> <meta http-equiv="Expires" content="-1"/> <meta http-equiv="Expires" content="Sat, 1 Jan 2000 00:00:00 GMT" />
… и я также попробовал следующий JavaScript …
<input type="hidden" id="refreshed" value="no"/> <script type="text/javascript"> onload=function(){ var e=document.getElementById("refreshed"); if(e.value=="no"){ e.value="yes"; } else{ e.value="no"; location.reload(); } } </script>
… все безрезультатно. Что мне здесь не хватает? Страницы сгенерированы с PHP, если это имеет значение.
ОБНОВЛЕНИЕ 1:
Я пробовал все предложения до сих пор, но я до сих пор не могу заставить это работать. Когда я использую PHP-код Криса, я использую его вот так …
<?php header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html dir="ltr" xmlns="http://www.w3.org/1999/xhtml"> <!--the rest of my page-->
.. и, как вы можете видеть, это находится на верхнем верхнем углу моей веб-страницы, перед заголовком DOCTYPE
.
Я также экспериментировал с session_start()
но даже после прочтения руководства я не уверен, что использую его правильно. Я правильно помещал это на самой верхней части моей страницы.
Я открыт для ЛЮБЫХ ПРЕДЛОЖЕНИЙ, которые делают эту работу без нарушения других функций страницы. Я знаю, что видел страницы, которые перезагружают КАЖДОЕ ВРЕМЯ, используется кнопка «Назад», КАК ОНИ ДЕЛАЮТ ЭТО ?!
РЕШИТЬ!
Оказывается, у меня было несколько вопросов, работающих против меня, но благодаря должной осмотрительности я смог устранить эти проблемы и выйти победителем.
После того, как Крис обновил свой код, чтобы …
<?php header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); echo time(); ?><a href="http://google.com">aaaaaaaaaaaaa</a>
Я обнаружил, что его код действительно работал, когда я использовал его ТОЧНО, как он имел это с НИЧЕГО, но когда я помещал его на свои страницы, это не сработало. Все мои страницы – это .php
или .html
и все они привязаны к DWT (Dynamic Web Template), поэтому я обновлял их сразу с помощью кода Криса. Я не понял, что DWT начинает ПРАВИЛЬНО после заголовка DOCTYPE
, поэтому код никогда не был вставлен на мои страницы. Я не мог найти способ включить DWT в заголовок DOCTYPE
поэтому я вошел во все мои страницы и вручную вставил код над заголовком DOCTYPE
.
Затем я обнаружил, что хотя мой сервер настроен на синтаксический анализ .htm
и .html
как .php
Страницы .html
генерируют ошибку в том самом месте, где я вставил код Криса, говорящий о том, что «невозможно изменить заголовки, заголовки имеют уже отправлено ». Мне все равно, что мои расширения, так что я просто изменил все мои расширения .html
расширения .php
.
Последнее незначительное раздражение заключалось в том, что, хотя страница теперь не кэшировалась (как и я хотел), Firefox помещал пользователя в свое последнее место на предыдущей странице, когда они использовали кнопку «Назад» (то есть, если пользователь находился внизу page a, когда они перешли на страницу b, тогда пользователь использовал кнопку «Назад» на странице b, они будут возвращены в нижней части страницы a, а не вверху страницы a по желанию). Исправлено мое первоначальное JavaScript исправлено это …
<script type="text/javascript"> onload=function(){ document.getElementById('content').scrollTop=0; } </script>
Несмотря на то, что это кажется очень привлекательным для такой простой проблемы, я рад, что она исправлена. Спасибо за вашу помощь всем (особенно Крису).
Это работает для меня
создайте новый php-файл. Я могу использовать кнопки «назад» и «вперед», а номер на странице всегда обновляется
<?php header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); echo time(); ?><a href="http://google.com">aaaaaaaaaaaaa</a>
Вы можете добавить следующий PHP-код на странице PHP.
CodeIgniter Framework version: $this->output->set_header('Last-Modified:'.gmdate('D, d MYH:i:s').'GMT'); $this->output->set_header('Cache-Control: no-store, no-cache, must-revalidate'); $this->output->set_header('Cache-Control: post-check=0, pre-check=0',false); $this->output->set_header('Pragma: no-cache');
Версия PHP:
header('Last-Modified:'.gmdate('D, d MYH:i:s').'GMT'); header('Cache-Control: no-store, no-cache, must-revalidate'); header('Cache-Control: post-check=0, pre-check=0',false); header('Pragma: no-cache');
А также вы можете добавить следующий код сценария Java на странице входа / мастер-страницы в разделе <head>
:
<script language="javascript" type="text/javascript"> window.history.forward(); </script>
Совместимость подтверждена в
Проверьте живые заголовки http, вы увидите, когда вы нажмете кнопку «Назад», запрос не будет сделан. Это делается специально, поэтому вы не теряете то, что вы, возможно, набрали в формы.
редактировать
Некоторые сообщения об обмене экспертами говорят, что это сработало, но с 2006 года.
<META HTTP-EQUIV="Expires" CONTENT="0"> <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache"> <META HTTP-EQUIV="Cache-Control" CONTENT="no-store">
Затем обновление javascript
<meta http-equiv="Cache-Control" content="no-cache" />
Я думаю, что правильное значение – «no-cache»
session_cache_limiter('nocache');
Это должно автоматически генерировать все необходимые заголовки. Обратите внимание, что некоторые браузеры, такие как Opera, по-прежнему игнорируют их при использовании кнопки «Назад».
РЕДАКТИРОВАТЬ
Соответствующие заголовки состоят в следующем, если вы хотите сгенерировать их другим способом:
Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache
Зачем? Я имею в виду, почему вы хотите это сделать? Когда я нажимаю кнопку «Назад», я хочу, чтобы стандартная функция предоставлялась браузером – вернуться на предыдущую страницу. Я не хочу сюрприза.
Если нужно остановить случайную повторную отправку POST, это может быть легко достигнуто путем завершения обработки POST с помощью перенаправления для отображения желаемого ответа с использованием GET. Позднее на этой странице будет отображаться перенаправленный GET (или перезагрузить его из кеша, который должен иметь тот же результат). Это то, чего пользователь ожидает и безвреден.
Это имеет дополнительное преимущество в том, что если ваше сохранение не удалось при обновлении базы данных, на дисплее отобразится то, что находится в базе данных, а не то, что осталось в переменных.
Вы отправили комментарий:
Это связано с тем, что после отправки формы, если пользователь нажимает кнопку «Назад», информация, которую они просматривают, будет неточной.
Если вы хотите предотвратить это, вы делаете это неправильно! 🙂
Вам нужно будет перенаправить, когда форма была отправлена.
<?php // code that handles the form submit header("Location: http://www.example.com/form-success.html"); // needs the absolute url (You can use $_SERVER['HTTP_HOST'], $_SERVER['PHP_SELF'] and dirname() for this) exit; // prevents further execution of the php code when while doing to redirect ?>