二重提出を防ぎたい場合は、「提出済み」と「未提出」の状態を保存する必要があります。この情報をどこに保存するかについては、いくつかのオプションがあります。
- データベース -一意の自動生成された値を持つ非表示フィールドを追加します(短いランダムな文字列を生成して現在の時刻を追加できます)。この値は、会話を識別するためにも使用できます-ステートフルなWeb会話が必要な場合。この値をデータベースに追加して、一意にします。短所:データベース内の冗長ストレージ、コメント挿入時のパフォーマンスの低下、一意の文字列を生成する必要があります。
- セッション -同様の問題で生成された値を使用して、同じ非表示フィールドを追加します。ユーザーがフォームを送信するときに、値がまだセッションにない場合は、セッションに値を保存します。もしそうなら、それは二重提出です。短所:一意のトークンを生成する必要があります。
- ブラウザ -(1)JavaScriptを追加して、クリックした送信ボタンを無効にします。 (2)値0で始まり、ユーザーが送信ボタンをクリックすると1に変更される非表示フィールドがあります。ユーザーがボタンをもう一度クリックすると、値が1であるかどうかを確認し、1である場合は中止します。利点:一意の文字列がありません。短所:JavaScriptを有効にする必要があります。ステートフルなWeb会話を実装するには、とにかく文字列が必要になる場合があります。