PHP: вернуться на предыдущую страницу с HTTP POST - PullRequest
0 голосов
/ 10 января 2019

У меня есть приложение PHP со страницей, которая имеет форму для поиска данных. Когда я нажимаю кнопку поиска, появляется страница Sumbit с методом HTTP POST. В этот момент я нажимаю на один элемент в списке результатов и перехожу на другую страницу. Если я нажимаю кнопку «Назад» в браузере на новой странице, я получаю сообщение об истечении срока действия документа. Зачем? Что я могу попытаться решить эту проблему?

Вот схематическое резюме:

СТРАНИЦА A -> Сообщение HTTP Отправить на СТРАНИЦУ A -> СТРАНИЦА B -> НАЗАД К СТРАНИЦЕ A -> ОШИБКА

Заранее спасибо.

1 Ответ

0 голосов
/ 10 января 2019

По сути, вы не хотите, чтобы пользовательский запрос завершался, когда они POST отправляют данные на html-страницу. Вам следует перенаправить их на страницу GET, чтобы их браузер считал их последним известным местоположением, а перенаправления - как часть общего запроса в браузерах.

// receive $_POST
// ... do work ...
// success!
header('Location: /wherever', true, 302);

Для этого обычно используется метод Found, позволяющий переходить от одного глагола к другому (хотя часто используются и другие глаголы, например, 303, но ... да, просто используйте 302)

Это должно решить вашу проблему!


Примечание: В этом конкретном случае особенно полезны такие вещи, как сессии Flash. Вы хотите, чтобы данные следовали за ними на перенаправленной странице, поэтому вы можете сказать: «О, вы вошли!» или что угодно. Это их цель. Есть несколько способов убрать этого зверя, но я просто хотел, чтобы вы знали.


Примечание. ++ : другие пользователи упоминали об этом, но это стоит повторить. Хотя вышеперечисленное решает вашу проблему, стандартное соглашение для форм поиска заключается в использовании GET

<form method="get" action="/search">
    <input name="q">
    <button type="submit">Search</button>
</form>

Это сделано по нескольким причинам, но именно так, чтобы результаты поиска были индексируемыми, закладками и общими.

POST обычно резервируется для больших двоичных объектов данных или конфиденциальных типов данных. Есть и другие варианты использования, такие как глаголы REST и т. Д., Но я слишком упрощаю вопрос.

К этому моменту убедитесь, что вы urldecode($_GET) свои данные.

...