Как сделать защиту от повторной отправки формы по F5?

Добрый день!
Есть HTML -форма, она отправляется POST - запросом и обрабатывается PHP.
При обновлении страницы (F5) заполненная форма, которая уже была отправлена ранее, отправляется повторно.
Как избежать этого? Какое решение наиболее правильное и удобное?

Форма отправляется сама на себя, то есть ее обработка происходит в этом же файле, поэтому Redirect использовать не получается.

Заранее спасибо за ответ!
  • Вопрос задан
  • 1799 просмотров
Решения вопроса 1
nlynx
@nlynx Автор вопроса
кому интересно - решение такое:
перед проверкой HTML- формы с помощью PHP
if ($_SERVER["REQUEST_METHOD"] == "POST") { .....и т.д.

нужно вставить:
if(isset($_GET['state']) && $_GET['state'] == 'new') {
  $_POST = array();
}

а перед закрывающим тегом этой общей проверки данной формы (начало её см. выше) нужно вставить:
header('Refresh:2; URL=main.php?state=new'); 
exit;
}

это в общих чертах.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 6
На странице приёма формы сразу после её приёма ставите редирект куда-то в header: location
Ответ написан
Комментировать
IonDen
@IonDen
JavaScript developer. IonDen.com
Конечно же отправить форму аяксом.

jQuery Ajax или How to
Ответ написан
Комментировать
Куча вариантов, первое что в голову приходит, это редирект на эту же страницу, но это не красиво.
А так гуголь достаточно информации выводит по этому вопросу.

Вариант с токеном из stackoverflow.com интересный
Ответ написан
Комментировать
Noizefan
@Noizefan
Костыльный вариант - можно писать в куки данные последней отправленной формы и проверять JS'ом совпадение этой куки с формой настоящего времени)
Можно обнулять форму и проверять перед отправкой, не пустая ли она.
Ответ написан
Комментировать
@Jsus
Летаю в облаках.
отправь значение что ты уже отправил форму
Ответ написан
Комментировать
OCTAGRAM
@OCTAGRAM
Кроме проверки на сервере, ещё можно возвращать в ответ на POST код перенаправления 303. Тогда браузер при навигации не повторяет POST.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы