У меня есть форма комментария для статьи, и я хотел бы предотвратить повторное представление. Я заметил, что Worpdress справляется с этим очень хорошо (возвращение не заставляет браузер запрашивать повторную отправку формы), но я не могу понять, как они это делают, даже если наши методы очень похожи.
Мой сценарий
Пользователь посещает mydomain.com/article/1/article_title.html
Заполняет форму, которая отправляет сообщения на mydomain.com/addnewcomment/1.html
.
Затем я делаю перенаправление 302 обратно на mydomain.com/article/1/article_title.html
.
Теперь, если я нажимаю назад с этой позиции, он не запрашивает перенаправление. Однако, если я перейду на другую страницу, например mydomain.com/tag/1/my_tag.html и нажмите обратно, чтобы повторно отправить форму.
Очевидно, я хочу предотвратить это.
Что делает Wordpress
Пользователь посещает mydomain.com/?p=1
Заполняет форму, которая отправляет на mydomain.com/wp-comments-post.php
Это тогда делает 302 перенаправления назад к mydomain.com/?p=1
Повторное нажатие или посещение другой страницы и повторное нажатие не вызывает повторной отправки.
Я просмотрел код WP, но не понимаю, как им это удается. Очевидно, это то, чего я хотел бы достичь.
У кого-нибудь есть мысли о том, где я могу пойти не так?
(я использую Wordpress только в качестве примера, чтобы доказать, что это возможно, очевидно, я не пытаюсь точно дублировать WP, это было бы бессмысленно)
РЕДАКТИРОВАТЬ - понял, что это было
Я точно не указал, какой это был заголовок, но я отправлял дополнительные заголовки перед выполнением перенаправления (проблема с моим кодом, вызов одной функции перед перенаправлением, когда действительно мне следовало сначала вызвать перенаправление).
После того, как я переместил функцию и прекратил отправлять эти заголовки до перенаправления, она работала нормально, без повторных отправлений после возврата.
Конечно, важно также проверять наличие дубликатов, но это останавливает браузер, когда он появляется с запросом на повторную отправку формы, что я и хотел.
Заголовки, которые я отправлял куда:
Content-Type
Последнее изменение
Etag
Content-язык
Cache-Control
Pragma
Истекает
Полагаю, это было связано с прагмой no-cache или must-revalidate в заголовке элемента управления cache.
В любом случае, если у вас возникла такая же проблема, проверьте, какие другие заголовки вы отправляете перед перенаправлением.