まず、質問を投稿するためのフォームを繰り返し、
1、道
要求が別のページに到達するために、道の背景を使用して転送されると、その後、アドレスバーには、F5キーを押すと、ページが更新され、フォームを再提出し、変更されていません。
2.第二の方法
ユーザーがクリックを送信すると、速度やその他の要因のためならば、ユーザは継続的に重複を提出する送信ボタンをクリックすることができます。
第3のアプローチ
ユーザーの提出は、戻るボタンをクリックすると、クリック重複が起こることを、改めて提出します。
第二に、ソリューション
重複またはいくつかの他の悪質な行為を提出するからユーザーを防ぐために、一定の措置がいくつかのオプション以下、繰り返し提出するユーザーを防ぐために、サーバー側で使用することができます。
1、UUIDを使用して
UUIDは、唯一のすべてのマシンが同じ空間にあることを保証するために、グローバルに固有の乱数が32進数であるユニバーサル一意識別子(汎用一意識別子)の略語です。
アイデア:
①フォームのJSP提出にUUIDを生成し、隠されたフィールドのトークンフィールドやフォームなどのセッションに保管してください。
②ユーザーがフォームを送信した後、フォームがドメインを取得するためにセッションからトークン隠されたフィールドは、トークンを取得することができます
③比較トークン2は、同じであれば同じ、コミット、およびトークンセッションドメインの除去;異なる場合、作業が行われる提出します。
コード例:
1 // 登录的JSP页面
2 <%
3 列UUID = UUID.randomUUID()のtoString()を交換( " - "、 "" );
4 にsession.setAttribute( "UUID" 、UUID)。
5 %>
6 <フォームアクション= "がloginservlet" METHOD = "POST">
7 の<input type = "隠れた"値= "<%= UUID%>"名前= "UUID2">
8 <ラベル>用户名称:</ラベル>
9 <入力クラス = "itxt"タイプ= "テキスト"プレースホルダ= "请输入用户名"オートコンプリート= "オフ"のtabindex = "1" NAME = "ユーザ名" />
IOException { 21 HttpSessionのセッション= でrequest.getSession();
22 23 //
ドメインセッションを採取し、隠されたフィールドは、UUID値
24 列UUID2 = request.getParameter( "UUID2" );
25 オブジェクトUUID = session.getAttribute( "UUID" );
26である
27 // に等しいか否かを判断する
28 IF(UUID! = NULL && 。uuid.toString()に等しい(UUID2)){
29 // に等しい:ドメインセッショントークン除去、提出
30 のSystem.out.printlnを( "それを提出HA !!!" );
31である session.removeAttribute ( "UUID" );
32 }
33である のSystem.out.println( "エンド!" );
34である
35 }
図2に示すように、確認コードを使用して