Кнопка "Назад" повторно отправляет данные формы ($ _POST)
Моя проблема в том, что кнопка "Назад" заставляет браузер говорить что-то вроде "Страница истек", когда предыдущая страница была создана формой.
Пример:
- page1: форма, отправленная с поиском
критерии (запрос $_POST, форма
указывает на стр. 2)
- page2: получает запрос $_POST и
показать результат (список пользователей со ссылками,
указывает на страницу 3)
- page3: Показать профиль пользователя
Теперь, когда посетитель нажимает кнопку "Назад" в браузере, он будет показывать что-то вроде "Страница истек".
Вместо этого предыдущая страница должна отображаться без предупреждений (стр. 2, с пользовательским списком)
Как ваши стратегии обойти это поведение?
Ответы
Ответ 1
Если вы отправляете параметры поиска с параметрами поиска, вы пытаетесь получить некоторые данные, а не модифицировать некоторые.
Итак, вы должны использовать метод HTTP GET, а не POST: POST следует использовать, когда вы собираетесь создавать/изменять данные, а GET следует использовать, когда вы собираетесь извлекать некоторые данные.
Или, если у вас есть операция создания/изменения, которая должна быть выполнена:
- Форма первых POST на первой странице
- Эта страница выполняет некоторые операции (например, записывает что-то в базу данных)
- И затем перенаправляется на другую страницу, используя заголовок
Location
HTTP.
- Это последняя страница, которая запрашивает браузер с помощью запросов GET, который отображает данные, полученные из параметров, полученных в URL-адресе.
См. страницу Post/Redirect/Get в википедии об этом.
Ответ 2
Используйте Опубликовать/Перенаправить/Получить (PRG) шаблон.
![PRG Pattern]()
Ответ 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'];
Повторите, чтобы отключить переменные после завершения процесса для оптимизации использования памяти.