Кнопка "Назад" повторно отправить данные формы ($POST)
Моя проблема в том, что кнопка "Назад" заставляет браузер говорить что-то вроде "Срок действия страницы истек", когда предыдущая страница была создана формой.
Пример:
- страница 1: форма, отправленная с критериями поиска (запрос $_POST, форма указывает на страницу 2)
- страница 2: Получает запрос $_POST и показывает результат (список пользователей со ссылками, указывает на страницу 3)
- страница 3: Показать профиль пользователя
Теперь, когда посетитель нажимает кнопку "Назад" в браузере, он покажет что-то вроде "Срок действия страницы истек".
Вместо этого предыдущая страница должна отображаться без предупреждений (страница 2, со списком пользователей)
Каковы ваши стратегии, чтобы обойти это поведение?
6 answers
Если вы отправляете запрос с параметрами поиска, вы пытаетесь получить некоторые данные, а не изменять некоторые.
Таким образом, вы должны использовать метод HTTP GET, а не POST: POST следует использовать, когда вы собираетесь создавать/изменять данные, а GET следует использовать, когда вы собираетесь извлекать некоторые данные.
Или, если у вас есть какая-то операция создания/изменения, которую необходимо выполнить:
- Форма сначала публикуется на первой странице
- Эта страница выполняет некоторые операции (например, запись чего-либо в базу данных)
- , а затем перенаправляет на другую страницу, используя заголовок HTTP
Location
.
- Именно эта последняя страница, которая запрашивается браузером с помощью запросов GET, отображает данные, извлеченные из параметров, полученных в URL-адресе.
Смотрите страницу Опубликовать/Перенаправить/Получить в википедии об этом.
Используйте Опубликовать/Перенаправить/Получить (PRG) Шаблон.
Отправьте заголовок Location
в опубликованном вами скрипте, указав на страницу, которая появится после.
Не используйте СООБЩЕНИЕ для поиска. Поиск можно безопасно выполнять с помощью GET, так как это ничего не изменит.
Это относится к PHP и IE8.
Вы не только должны установить для кэширования значение private, но и удалить 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");