Кнопка "назад" повторно отправить данные формы ($ POST)
моя проблема в том, что кнопка "Назад" заставляет браузер говорить что-то вроде "страница истекла", когда предыдущая страница была создана формой.
пример:
- page1: форма, отправленная с поиском критерии ($_POST, где запрос, форма указывает на страницу 2)
- page2: получает запрос $_POST и показать результат (список пользователей со ссылками, указывает на страницу 3)
- page3: показать профиль пользователя
теперь, когда посетитель нажимает назад кнопку в браузере, он покажет что-то вроде "страница просрочена".
вместо этого предыдущая страница должна отображаться без предупреждений (Страница 2, с userlist)
Как ваши стратегии обойти это поведение?
6 ответов
Если вы отправляете for с параметрами поиска, вы пытаетесь get некоторые данные, не изменять некоторые.
таким образом, вы должны использовать метод HTTP GET, а не POST : POST должен использоваться, когда вы собираетесь создавать/изменять данные, и GET должен использоваться, когда вы собираетесь получить некоторые данные.
Или, если у вас есть какая-то операция создания/изменения, которая должна быть выполнена:
- форма первые сообщения в первый страница
- эта страница выполняет некоторые операции (например, запись чего-то в базу данных)
- и затем перенаправляет на другую страницу, используя
Location
заголовок HTTP.
- это последняя страница, которая запрашивает браузер с помощью GET-запросов, которая отображает данные, извлеченные из параметров, полученных в URL-адресе.
посмотреть Post / Redirect / Get страница в Википедии, об этом.
отправить Location
заголовок в скрипте, который вы разместили, указывая на страницу, которая приходит после.
Не используйте POST для поиска. Поиск можно безопасно выполнить с помощью GET, так как он ничего не изменит.
это относится к PHP и IE8.
вы не только должны установить cacheing в private, но вы должны удалить 4 заголовка cacheing, и это можно сделать только с PHP 5.3. В PHP 5.2 вы можете установить 4 заголовка в пустые значения только при использовании метода setHeader() Zend Framework. По какой-то причине на IE8 недостаточно установить 4 значения заголовка в пустые значения. Вот код для PHP 5.3:
header_remove("Expires");
header_remove("Cache-Control");
header_remove("Pragma");
header_remove("Last-Modified");
для этого можно использовать сеанс.
например.
$_SESSION ['name'] = $_POST ['name'];
Remeber, чтобы отменить установку переменных после завершения процесса для оптимизации использования памяти.