最後に、一部のモバイルブラウザが送信ボタンを無効にするJavaScriptを無視し、ユーザーがフォームを複数回再送信することに成功したことを発見しました。
これに対する最も簡単な(?)解決策は次のとおりです。
Token(uniqueidentifier)、DateCreated(DateTime)の2つのフィールドを使用して、データベースにテーブル「SubmissionTokens」を作成します。次に、送信フォームのあるページが読み込まれたら、データベースにトークンを追加し、同じページの非表示フィールドに「id」値を保存します。ユーザーがフォームを送信したら、非表示フィールドからトークンを読み取り、トークンがテーブルSubmissionTokensに存在するかどうかを確認します。存在する場合は、フォームデータを含む新しいレコードをデータベースに挿入し、SubmissionTokensからトークンを削除します。DateCreateフィールドを使用してトークンを期限切れにすることもできます。
仕事で私は少し異なるソリューションを実装し、新しいレコードを挿入する前にデータベースで重複したレコードを探すだけです。ただし、これは、ユーザーがブラウザで[戻る]をクリックした場合にフォームを再送信できる必要があるという特定の要件があるためです。この場合、SubmissionTokenはすでに削除されており、最初のソリューションは機能しません。