Кнопка "назад" повторно отправить данные формы ($ 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 страница в Википедии, об этом.


использовать Post / Redirect / Get (PRG) Pattern.

PRG Pattern


отправить 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, чтобы отменить установку переменных после завершения процесса для оптимизации использования памяти.