0

次の問題がある古いフレームワーク1.1プロジェクトがあります。ユーザーがページを送信すると、データベースに重複したレコードが表示される場合があります。このエラーは頻繁に繰り返されますが、一貫性はありません。ほとんどの場合、重複するエントリはありませんが、場合によっては最大4つまで存在する可能性があります。最初の送信後、JavaScriptで送信ボタンを無効にします。

これが役立つかもしれません:ユーザー入力(送信される)を格納するために使用されるセッションオブジェクトがあります。

重複したレコードが発生する可能性がある理由を考えることができるシナリオはありますか?

どうもありがとう

4

1 に答える 1

0

最後に、一部のモバイルブラウザが送信ボタンを無効にするJavaScriptを無視し、ユーザーがフォームを複数回再送信することに成功したことを発見しました。

これに対する最も簡単な(?)解決策は次のとおりです。

Token(uniqueidentifier)、DateCreated(DateTime)の2つのフィールドを使用して、データベースにテーブル「SubmissionTokens」を作成します。次に、送信フォームのあるページが読み込まれたら、データベースにトークンを追加し、同じページの非表示フィールドに「id」値を保存します。ユーザーがフォームを送信したら、非表示フィールドからトークンを読み取り、トークンがテーブルSubmissionTokensに存在するかどうかを確認します。存在する場合は、フォームデータを含む新しいレコードをデータベースに挿入し、SubmissionTokensからトークンを削除します。DateCreateフィールドを使用してトークンを期限切れにすることもできます。

仕事で私は少し異なるソリューションを実装し、新しいレコードを挿入する前にデータベースで重複したレコードを探すだけです。ただし、これは、ユーザーがブラウザで[戻る]をクリックした場合にフォームを再送信できる必要があるという特定の要件があるためです。この場合、SubmissionTokenはすでに削除されており、最初のソリューションは機能しません。

于 2012-05-30T08:51:04.273 に答える