Java Web防止フォームの重複提出のいくつかの方法
7697 ワード
一、フォームが重複して提出される一般的なアプリケーションシーンネットワークが遅延している場合、ユーザは何回もsubmitボタンをクリックしてフォームを繰り返し に提出します.ユーザがフォームを提出した後、「更新」ボタンをクリックするとフォームが重複して提出されます(ブラウザの更新ボタンをクリックすると、ブラウザが前回したことをもう一回実行します.これによってフォームが重複して提出されることもあります.) ユーザがフォームを提出した後、ブラウザの【後退】ボタンをクリックしてフォームページに戻して再提出し、フォームの重複提出を防止する方法1、JavaScriptを利用してフォームの重複提出を防止する(1)、JavaScriptでFormフォームを制御して一度だけ主要コードを提出することができます.
主要コード:
(4)、ajaxが加錠してajax方式でフォームを提出する場合、ブール変数(true/false)を設定します.もちろん他のタイプの変数も可能です.最初はtrueで提出できます.フロントエンドがサーバに要求した後、サービス側の応答結果が戻って来ない前にこの値をfalseにして、正常に応答した時にtrueにします.
(5)提出後、提出成功した用紙にリダイレクトして提出し、別の成功ページにジャンプします.このように、ユーザがF 5を押して繰り返し提出することを避けることができ、ブラウザでもフォームの繰り返しによる警告が発生しないし、ブラウザでの前進と後退による同様の問題が解消される.
(6)、サービス端末がユニークなtokenを生成し、まずサービス側でtokenを生成して一意性を保証し、その後このtokenをsessionまたはredisなどのキャッシュに保存する.同時にtokenをページの隠しinputに置いて、ブラウザに送ります.ユーザはページ上で提出する時、このtokenを持ってサービスに提出し、サービスはtokenの値を照合することによって行われる.等しい代表が最初に提出された場合、sessionまたはキャッシュに保存されているtoken値removeを削除し、逆に重複して提出されたと見なし、サービス側は処理しない.
(7)、クッキー記録票が提出された状態は、Cookie記録票を用いて提出された状態で、その状態に応じてフォームが提出されたかどうかを確認することができる.同様に、サービス端末はCookieにtokenを生成し、フォーム提出時にCookieのtokenとサービス端末tokenを照合する.
(8)、データベースに一意のインデックス制約を追加し、データベースフィールドに一意のインデックスを追加します.フォームが重複して提出されている場合、データベースに重複記録を挿入する場合、重複入庫を防止するために一意の制約が有効です.このようにコントロールすると、Your program atempts to store duplicate values in a database column that is constration by a unique indexのエラーメッセージがログに表示されます.
<form action="${pageContext.request.contextPath}/servlet/DoFormServlet" onsubmit="return dosubmit()" method="post">
:<input type="text" name="username">
<input type="submit" value=" " id="submit">
form>
<head>
<title>Form title>
<script type="text/javascript">
var isCommitted = false;
// , false
function dosubmit(){
if(isCommitted==false){
isCommitted = true;
// , true
return true;
// true
} else {
return false;
// false
}
}
script>
head>
(2)提出ボタンを使用不可に設定する主要コード:
function dosubmit(){
//
var btnSubmit = document.getElementById("submit");
// ,
btnSubmit.disabled= "disabled";
// true
return true;
}
(3)、検証コードページに検証コードを追加し、認証入力が正しいかどうかにかかわらず、提出後に認証コードを更新する.(4)、ajaxが加錠してajax方式でフォームを提出する場合、ブール変数(true/false)を設定します.もちろん他のタイプの変数も可能です.最初はtrueで提出できます.フロントエンドがサーバに要求した後、サービス側の応答結果が戻って来ない前にこの値をfalseにして、正常に応答した時にtrueにします.
(5)提出後、提出成功した用紙にリダイレクトして提出し、別の成功ページにジャンプします.このように、ユーザがF 5を押して繰り返し提出することを避けることができ、ブラウザでもフォームの繰り返しによる警告が発生しないし、ブラウザでの前進と後退による同様の問題が解消される.
(6)、サービス端末がユニークなtokenを生成し、まずサービス側でtokenを生成して一意性を保証し、その後このtokenをsessionまたはredisなどのキャッシュに保存する.同時にtokenをページの隠しinputに置いて、ブラウザに送ります.ユーザはページ上で提出する時、このtokenを持ってサービスに提出し、サービスはtokenの値を照合することによって行われる.等しい代表が最初に提出された場合、sessionまたはキャッシュに保存されているtoken値removeを削除し、逆に重複して提出されたと見なし、サービス側は処理しない.
(7)、クッキー記録票が提出された状態は、Cookie記録票を用いて提出された状態で、その状態に応じてフォームが提出されたかどうかを確認することができる.同様に、サービス端末はCookieにtokenを生成し、フォーム提出時にCookieのtokenとサービス端末tokenを照合する.
(8)、データベースに一意のインデックス制約を追加し、データベースフィールドに一意のインデックスを追加します.フォームが重複して提出されている場合、データベースに重複記録を挿入する場合、重複入庫を防止するために一意の制約が有効です.このようにコントロールすると、Your program atempts to store duplicate values in a database column that is constration by a unique indexのエラーメッセージがログに表示されます.