У меня есть страница покупки, и я не хочу, чтобы пользователь смог обновить страницу и повторно отправить форму, после того как они получают к 'порядку полную' страницу, потому что это автоматически настраивает их в нашей системе через базу данных, оценивает и заряжается, их карта через PayPal (только хотят, чтобы они произошли ОДНАЖДЫ)... Я видел некоторые сайты, которые говорят, 'Не поражают обновление, или Вы будете заряжены дважды!' но это является довольно хромым для отъезда этого открытым для возможности, что хороший путь состоит в том, чтобы только позволить этому быть отправленным однажды или препятствовать тому, чтобы они обновились и т.д.?
PS: Я видел несколько подобных вопросов: PHP: Мешайте Форме быть случайно повторно обработанными, когда Назад нажимается и Как я мешаю Обратному и Кнопкам Обновить повторно отправить мою форму? но найденный никаким удовлетворительным ответом... MVC ASP.NET определенный ответ был бы идеален также, если существует механизм для этого.
Править: После того как они нажимают, утверждают, что это ОТПРАВЛЯЕТ на мой контроллер, и затем контроллер делает некоторое волшебство и затем возвращает представление с порядком полное сообщение, но если я нажимаю обновление на свой браузер, это делает целое, 'Вы хотите снова послать эту форму?' это плохо...
Стандартное решение для этого является Post / Redirect / Get . Этот шаблон может быть реализован с использованием в значительной степени любой платформы веб-разработки. Как правило, вы бы:
При обслуживании страницы подтверждения заказа вы можете установить токен, который вы также хранятся в DB / Cache. При первом случае подтверждения заказа проверьте наличие этого токена и очистить токен. Если реализован с безопасностью потока, вы не сможете представить заказ дважды.
Это только один из многих подходов.
Просто сделайте перенаправление со страницы, которая делает все неприятные вещи на страницу «Спасибо за ваш заказ». Сделав это, пользователь может ударить обновление столько раз, сколько он любит.
Дайте каждому посетителю форму уникальный идентификатор, когда страница сначала загружена. Обратите внимание на идентификатор, когда форма представлена. После того, как форма была представлена с этим идентификатором, не разрешайте никаких дополнительных запросов, использующих его. Если они нажимают об обновлении, тот же идентификатор будет отправлен.
Казин Мансур Рашид писал о этого (вместе с другими лучшими практиками ASP.NET MVC). Он предлагает использовать два фильтра для обработки передачи данных между постом, а следуйте на следующем использовании Tempdata.
От верхней части моей головки, генерируйте System.Guid
в скрытом поле в получении страницы «Получить страницу» и свяжите его с помощью вашего заказа / платежа. Просто проверьте на это и отобразите сообщение, сказав, что «оплата уже обработана». или такой.