Java Web防止フォームの重複提出のいくつかの方法

7697 ワード

一、フォームが重複して提出される一般的なアプリケーションシーン
  • ネットワークが遅延している場合、ユーザは何回もsubmitボタンをクリックしてフォームを繰り返し
  • に提出します.
  • ユーザがフォームを提出した後、「更新」ボタンをクリックするとフォームが重複して提出されます(ブラウザの更新ボタンをクリックすると、ブラウザが前回したことをもう一回実行します.これによってフォームが重複して提出されることもあります.)
  • ユーザがフォームを提出した後、ブラウザの【後退】ボタンをクリックしてフォームページに戻して再提出し、フォームの重複提出を防止する方法1、JavaScriptを利用してフォームの重複提出を防止する(1)、JavaScriptでFormフォームを制御して一度だけ主要コードを提出することができます.
    <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のエラーメッセージがログに表示されます.