Принудительная страница для перезагрузки с сервера вместо загрузки кешированной версии
У меня есть веб-страница A. Пользователь нажимает на форму для отправки данных и берет его на веб-страницу B. Когда он нажимает кнопку "Назад", мне нужна веб-страница A, которая будет обновляться с сервера, а не загружается из кеша. У меня есть это: <meta http-equiv="expires" content="0">
, но он, похоже, не работает. Я также попытался установить переменную на странице B (переменная сеанса через php), а затем проверить ее на странице A и обновить (или нет) в соответствии с ее существованием. Это, похоже, тоже работает. Основной код для этого:
Страница A:
<?php
if(isset($_SESSION['reloadPage'])) {
unset($_SESSION['reloadPage']);
echo'
<script>
window.location.replace("/****/****/*****.php");
</script>
';
}
?>
И на странице B:
$_SESSION['reloadPage'] = 1;
С помощью PHP-решения он просто пытается обновить страницу в бесконечном цикле. Что-то в моей логике отсутствует? Правильно ли это?
ИЗМЕНИТЬ
При дальнейшем расследовании, когда вы указываете браузеру, что он не кэширует страницу, это также заставляет полностью обновлять серверную часть? Это то, что мне нужно. Полное обновление на стороне сервера на странице.
Ответы
Ответ 1
OK попробуйте это вместо:
<?php
if(!session_id()) {
@session_start();
}
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
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');
if(isset($_SESSION['form_submitted'])) {
unset($_SESSION['form_submitted']);
header('Location: ?' . uniqid());
#header('Refresh: 0');
}
?>
Вам нужно будет установить $_SESSION ['form_submitted'] = true на стр. 2.
Ответ 2
Попробуйте со всеми тремя:
<meta http-equiv="cache-control" content="no-cache"> <!-- tells browser not to cache -->
<meta http-equiv="expires" content="0"> <!-- says that the cache expires 'now' -->
<meta http-equiv="pragma" content="no-cache"> <!-- says not to use cached stuff, if there is any -->
Ответ 3
<?php
session_start();
if(isset($_SESSION['reloadPage'])) {
unset($_SESSION['reloadPage']);
//no outputting code above header
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
header("Location: http://www.mypage.com/");
}
?>
Ответ 4
Я знаю, что это старый вопрос и уже есть ответ (который не освежает сервер). Поэтому я хотел бы поделиться решением с помощью jQuery.
$('#back-button').click(function(){
setTimeout(location.reload(true), 1000);
});
Объяснение:
Когда вы нажмете кнопку "Назад", setTimeout
вызывается через 1 секунду (1000 миллисекунд). Затем страница будет перезагружаться с сервера, поскольку параметр внутри reload
равен true
.
Если вы поместите true
внутри reload
, он перезагрузится с сервера, а если вы поместите false
, он перезагрузится из кеша. Источник w3schools.
Ответ 5
Ваш JavaScript должен быть...
window.location = "/****/****/*****.php"
Я думаю, что это должно исправить ваш цикл.
Ответ 6
<?php
session_start();
if(isset($_SESSION['reloadPage'])) {
unset($_SESSION['reloadPage']);
echo'
<script>
window.location.replace("/****/****/*****.php");
</script>
';
}
?>