Часто люди упускают из виду самый обычный способ справиться с этим, который заключается в использовании одноразовых ключей .
Вы можете использовать PRG , как уже упоминали другие, но недостатком PRG является то, что он не решает проблему двойного щелчка, он требует дополнительной поездки на сервер для перенаправление, и поскольку последний шаг - это запрос GET, у вас нет прямого доступа к только что опубликованным данным (хотя они могут быть переданы в качестве параметра запроса или поддерживаться на стороне сервера).
Мне нравится решение Javascript, потому что оно работает большинство времени.
Nonce keys однако, работают все время. Одноразовый ключ - это случайный уникальный GUID, сгенерированный сервером (также сохраненный в базе данных) и встроенный в форму. Когда пользователь помещает POST в форму, одноразовый ключ также публикуется. Как только POST приходит на сервер, сервер проверяет, существует ли одноразовый ключ в его базе данных. Если это так, сервер удаляет ключ из базы данных и обрабатывает форму. Следовательно, если пользователь выполняет POST дважды, второй POST не будет обработан, так как одноразовый ключ был удален после обработки первого POST.
Дополнительный ключ имеет дополнительное преимущество в том, что он обеспечивает дополнительную безопасность, предотвращая повторных атак (человек посередине прослушивает ваш HTTP-запрос и затем передает его на сервер, который рассматривает его как законный) .