** Некоторые фон: Кредит отправляется в Брюс (sqlwork.com) за отличное объяснение.
На этой веб-странице требуются данные, которые вы ввели ранее для правильного отображения. Вы можете отправить эти данные еще раз, но при этом вы повторите любое действие, которое ранее выполняла эта страница. Нажмите «Обновить», чтобы повторно отправить эти данные и отобразить эту страницу.
Из-за неаккуратных методов кодирования веб-разработчиков браузеры были вынуждены добавить это сообщение. Сценарий выглядит следующим образом:
1) пользователь заполняет форму и отправляет (сообщения формируют) 2) сервер почтовые данные и отвечает на новую страницу (подтверждающим) отмечен как не кэшируется 3) пользователь переходит на новую страницу. 4) пользователь нажимает:
для браузера, чтобы отобразить страницу на шаге 2, поскольку ее отмеченный no-cache, он должен запросить его с сервера, другими словами, сделать репозицию данных (do шаг 1). здесь было небрежное кодирование, если это была плата за кредитную карту, а обнаружение репозиции не было на сервере, карта взимается дважды. это было настолько распространенной проблемой, что браузеру пришлось обнаружить это и предупредить пользователей.
Лучшее исправление находится на втором шаге, сервер отправляет перенаправление на страницу подтверждения. тогда, когда пользователь обращается к подтверждению через историю или обратно, его запрос на получение, а не запрос на отправку, и не будет показывать предупреждение.
примечание: модель обратной обратной связи webform поддается этой проблеме. также избегайте передачи сервера.
Мое решение
$ _SESSION [ 'домой'] используется для хранения каких-либо ошибок на домашней странице.
$ _SESSION ['tempEmail'] используется для эхо-значения в форме php.
Примечание. Используйте одну уникальную переменную сеанса для каждой страницы, которая имеет форму HTML для обработки ошибок, а также любую переменную сеанса для каждого значения, которое отображается в форме HTML.
<?php
session_start();
//Initialize variables not initialized without overwriting previously set variables.
if(!isset($_SESSION['home'])) {
$_SESSION['home']="";
$_SESSION['tempEmail']="";
}
Дополнительно - Если войти в систему, назначить адрес электронной почты в переменной $ _SESSION [ «tempEmail»] (если не сделано ранее), чтобы предварительно заполнить форму HTML.
if(isset($_POST['Submit'])){
---your code---
//Error message(s) examples
$_SESSION['home'] = "Email and Password do not match, please try again.";
header("Location: " . $_SERVER['REQUEST_URI']);
$_SESSION['home'] = "Email address format is invalid. Please recheck.";
header("Location: " . $_SERVER['REQUEST_URI']);
//success
unset ($_SESSION['home']); //optional, unset to clear form values.
header ("location: nextpage.php");
---or---
header("Location: " . $_SERVER['REQUEST_URI']); //re-post to same page with the $_SESSION['home'] success message.
}
?>
<body>
окно Error
<span><strong class="error"><?php echo $_SESSION['home'] ?></strong></span>
HTML форма
<form action="#" name="loginform" method="post" >
<input type="text" name="userEmail" maxlength="50" title="Enter Your email" autocomplete="off" value="<?php echo htmlspecialchars($_SESSION['tempEmail']); ?>" placeholder="enter email" required/>
<input type="submit" name="Submit" value="Submit">
</form>
</body>
Не рекомендуется использовать на странице оплаты, см обсуждение выше. Протестировано в Firefox, Chrome, Safari и IE9. При использовании кнопки возврата неприятные сообщения исчезают. Убедитесь, что буферизация вывода включена в вашем php-скрипте или php.ini, чтобы избежать предупреждений заголовков. Вы можете проверить свой файл php.ini следующим образом;
output_buffering=On
Вы открыты для использования сервера хранения конечных данных? MySQL, Redis? Лучший способ - хранить данные на сервере, когда пользователь перемещается. –
, и этим вы подразумеваете, что мне нужно хранить все значения из представленных форм во время сеанса пользователя? Могу ли я использовать для этого хранилище сеансов? –
Вы можете использовать хранилище сеансов, но оно не очень масштабируемо и становится неправильным способом, если количество данных в каждом случае будет немного меньше, чем немного. Я бы сказал, что для домашней сессии сеансовое хранение в порядке, для производства этого недостаточно. –