Что такое хороший метод для того, чтобы препятствовать тому, чтобы пользователь отправил форму дважды?

У меня есть страница покупки, и я не хочу, чтобы пользователь смог обновить страницу и повторно отправить форму, после того как они получают к 'порядку полную' страницу, потому что это автоматически настраивает их в нашей системе через базу данных, оценивает и заряжается, их карта через PayPal (только хотят, чтобы они произошли ОДНАЖДЫ)... Я видел некоторые сайты, которые говорят, 'Не поражают обновление, или Вы будете заряжены дважды!' но это является довольно хромым для отъезда этого открытым для возможности, что хороший путь состоит в том, чтобы только позволить этому быть отправленным однажды или препятствовать тому, чтобы они обновились и т.д.?

PS: Я видел несколько подобных вопросов: PHP: Мешайте Форме быть случайно повторно обработанными, когда Назад нажимается и Как я мешаю Обратному и Кнопкам Обновить повторно отправить мою форму? но найденный никаким удовлетворительным ответом... MVC ASP.NET определенный ответ был бы идеален также, если существует механизм для этого.

Править: После того как они нажимают, утверждают, что это ОТПРАВЛЯЕТ на мой контроллер, и затем контроллер делает некоторое волшебство и затем возвращает представление с порядком полное сообщение, но если я нажимаю обновление на свой браузер, это делает целое, 'Вы хотите снова послать эту форму?' это плохо...

12
задан Community 23 May 2017 в 12:26
поделиться

6 ответов

Стандартное решение для этого является Post / Redirect / Get . Этот шаблон может быть реализован с использованием в значительной степени любой платформы веб-разработки. Как правило, вы бы:

  • Проверка отправки после поста
  • Если он не может повторно отображать исходную форму ввода с отображаемыми ошибками проверки
  • , если он преуспевает, перенаправляйте на страницу подтверждения или страницу, в которой вы повторно отображаете вход - Это часть получателя
  • , поскольку последнее действие было получением, если пользователь обновляется на данный момент, нет повторной передачи формы.
19
ответ дан 2 December 2019 в 04:02
поделиться

При обслуживании страницы подтверждения заказа вы можете установить токен, который вы также хранятся в DB / Cache. При первом случае подтверждения заказа проверьте наличие этого токена и очистить токен. Если реализован с безопасностью потока, вы не сможете представить заказ дважды.

Это только один из многих подходов.

2
ответ дан 2 December 2019 в 04:02
поделиться

Просто сделайте перенаправление со страницы, которая делает все неприятные вещи на страницу «Спасибо за ваш заказ». Сделав это, пользователь может ударить обновление столько раз, сколько он любит.

0
ответ дан 2 December 2019 в 04:02
поделиться

Дайте каждому посетителю форму уникальный идентификатор, когда страница сначала загружена. Обратите внимание на идентификатор, когда форма представлена. После того, как форма была представлена ​​с этим идентификатором, не разрешайте никаких дополнительных запросов, использующих его. Если они нажимают об обновлении, тот же идентификатор будет отправлен.

1
ответ дан 2 December 2019 в 04:02
поделиться

Казин Мансур Рашид писал о этого (вместе с другими лучшими практиками ASP.NET MVC). Он предлагает использовать два фильтра для обработки передачи данных между постом, а следуйте на следующем использовании Tempdata.

-1
ответ дан 2 December 2019 в 04:02
поделиться

От верхней части моей головки, генерируйте System.Guid в скрытом поле в получении страницы «Получить страницу» и свяжите его с помощью вашего заказа / платежа. Просто проверьте на это и отобразите сообщение, сказав, что «оплата уже обработана». или такой.

-1
ответ дан 2 December 2019 в 04:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: