Подтвердить что ты не робот

Кнопка "Назад" повторно отправляет данные формы ($ _POST)

Моя проблема в том, что кнопка "Назад" заставляет браузер говорить что-то вроде "Страница истек", когда предыдущая страница была создана формой.

Пример:

  • page1: форма, отправленная с поиском критерии (запрос $_POST, форма указывает на стр. 2)
  • page2: получает запрос $_POST и показать результат (список пользователей со ссылками, указывает на страницу 3)
  • page3: Показать профиль пользователя

Теперь, когда посетитель нажимает кнопку "Назад" в браузере, он будет показывать что-то вроде "Страница истек".

Вместо этого предыдущая страница должна отображаться без предупреждений (стр. 2, с пользовательским списком)

Как ваши стратегии обойти это поведение?

4b9b3361

Ответ 1

Если вы отправляете параметры поиска с параметрами поиска, вы пытаетесь получить некоторые данные, а не модифицировать некоторые.

Итак, вы должны использовать метод HTTP GET, а не POST: POST следует использовать, когда вы собираетесь создавать/изменять данные, а GET следует использовать, когда вы собираетесь извлекать некоторые данные.


Или, если у вас есть операция создания/изменения, которая должна быть выполнена:

  • Форма первых POST на первой странице
    • Эта страница выполняет некоторые операции (например, записывает что-то в базу данных)
    • И затем перенаправляется на другую страницу, используя заголовок Location HTTP.
  • Это последняя страница, которая запрашивает браузер с помощью запросов GET, который отображает данные, полученные из параметров, полученных в URL-адресе.

См. страницу Post/Redirect/Get в википедии об этом.

Ответ 3

Отправьте заголовок Location в script, на который вы отправили сообщение, указав на страницу, которая появляется после.

Ответ 4

Не используйте POST для поиска. Поиск можно безопасно выполнить с помощью GET, поскольку он ничего не изменит.

Ответ 5

Это относится к PHP и IE8.

Необходимо не только настроить кеширование на личную, но вы должны удалить 4 заголовка кеширования, и это можно сделать только с помощью 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");

Ответ 6

Вы можете использовать сеанс для этого.

например.

$_ SESSION ['name'] = $_POST ['name'];

Повторите, чтобы отключить переменные после завершения процесса для оптимизации использования памяти.