Обновить сайт при доступе во второй раз

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

Рассматриваемый веб-сайт представляет собой тип сайта "создайте свой собственный продукт" и использует многоэтапную форму, чтобы направлять клиентов по всем этапам создания продукта. Клиент хочет, чтобы сайт был таким, чтобы каждый раз, когда пользователь заходил на сайт по прямой ссылке или нажатием кнопок "назад" и "вперед" в браузере, он должен обновляться. Другими словами, нет кеширования (верно?).

Я пытался использовать решения, которые я нашел на SO и на других сайтах, которые в основном состояли из

header("Last-Modified: " . gmdate("D, d M Y H: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");

Но это не сработало.

Поэтому я попробовал свое собственное решение:

$location = "/fabriquer/";
if(isset($_COOKIE['first_load']) && $_COOKIE['first_load'] == "true") {
    setcookie('first_load', 'false');
    header("Location: " . "http://" . $_SERVER['HTTP_HOST'] . $location);
} else {
    setcookie('first_load', 'true');
}

Но это также, кажется, не работает должным образом. Когда я нажимаю кнопку "Назад" в своем браузере, чтобы вернуться на этот сайт, обновление не происходит, но во втором решении для файла cookie установлено значение true / false.

Есть идеи?

2 ответа

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

$url = $url.'?ver='.rand(1,1000);

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

Как Джо упомянул в комментариях ранее сегодня и в другом [удаленном?] Комментарии, мой вопрос действительно дублировал тот, который был задан здесь.

Оказывается, что я делал это неправильно, и этот удаленный комментарий поставил меня на правильный путь, пока я не увидел комментарий Джо.

Удаленный [приблизительно] комментарий гласил:

Вы должны объединить две строки Cache-Control в одну, так как вторая переопределяет первую.

Кто бы ни написал это, спасибо.

Поэтому я просто посмотрел код в исходном вопросе (ссылка выше) и нашел следующий фрагмент кода, который исправил мою проблему.

header('Cache-Control: no-cache, no-store, must-revalidate'); // HTTP 1.1.
header('Pragma: no-cache'); // HTTP 1.0.
header('Expires: 0'); // Proxies.

Затем я проверил в своих браузерах (правильно очистил кеш и использовал режим инкогнито просто для безопасности), и он работал отлично. Я не буду "отвечать на свой вопрос", но я хотел представить свои аргументы. Этот вопрос действительно повторяется, и ответ был найден в ответе BalusC.

Спасибо за помощь!

Другие вопросы по тегам