Как уже упоминалось в предыдущем ответе, это хорошо иметь некоторую клиентскую сторону Javascript, чтобы остановить дублированных от триггерных счастливых пользователей, однако вы должны также сделать эту сторону проверки сервера.
Одним из подходов было бы создание скрытого поля формы с идентификатором GUID, который генерирует coldfusion, когда coldfusion отображает вашу форму.
Так что-то вроде:
<cfset GUID = createUUID()>
<cfoutput>
<form id="frm" action="/target.cfm" method="post">
<input type="hidden" name="guid" value="#GUID#">
<!-- all your formfields go here -->
<input type="submit">
</form>
</cfoutput>
На стороне сервера целевой страницы проверяет, если он ранее уже получили GUID. Есть много способов сделать, вот два из многих способов.
a) Сфера применения.
Это, вероятно, самый быстрый способ, если вы не работаете в кластерной среде и вам просто нужно что-то быстрое для крошечного приложения.
<cfif isDefined("session.MYPAGE_GUID") AND session.MYPAGE_GUID EQ form.guid>
<cfoutput>Duplicate Form Submission</cfoutput>
<cfabort>
<cfelse>
<cfset session.MYPAGE_GUID = form.guid>
<!-- Do Business Logic Here -->
</cfif>
b) Используйте таблицу базы данных. Создайте таблицу базы данных с столбцом с именем GUID. Убедитесь, что GUID является первичным ключом или имеет уникальное ограничение.
Перед тем, как запустить свою бизнес-логику, вставьте форму.GUID в таблицу базы данных. Если вы можете выполнить процесс вставки вашей бизнес-логики, если запрос базы данных не выдает ошибку, которая существует в записи. Затем вы можете уловить эту ошибку и предпринять соответствующие действия для дублирования представления.
Я предпочитаю вариант базы данных, поскольку он работает в кластерных средах, а сервер базы данных устойчив к условиям гонки, чтобы гарантировать, что GUID установлен только один раз.
Обратите внимание, что это просто демонстрирует основные понятия и не является падением в решении. Есть немного больше работы, чтобы превратить эти концепции в решение для электронной коммерции.
Вы говорите о кнопке и показываете привязную метку. Пожалуйста, устраните несоответствие. –
@DanBracuk вот он :) – WiTHS4UC3
Почему это помечено как ColdFusion? Это проблема с клиентской стороной. –