Задать вопрос

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

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

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

Заранее спасибо за ответ!
  • Вопрос задан
  • 1885 просмотров
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 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.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
IT ATLAS Москва
от 250 000 до 500 000 ₽