トークンベースの処理は、一度だけで完了するアプローチです。 コードをコピー コードは次のとおりです: function formsubmit() { <BR>Today = new Date(); <BR>var NowMinute = Today.getMinutes(); .getSeconds( ); <BR>var mysec = (NowHour*3600) (NowMinute*60) NowSecond; <BR>if((mysec-document.formsubmitf.mypretime.value)>600){ <BR>//600値は、5 分以内に繰り返し送信が禁止されることを意味します。 <BR>document.formsubmitf.mypretime.value=mysec; <BR>} <BR>alert( ' 一度クリックするだけです。送信は繰り返さないでください。しばらくお待ちください。'); <BR>return false>} <BR> /script> <br> <br> <br>Web ページのバック無効化キャッシュを防止します <br>ブラウザのキャッシュとページの有効期間を制御することで、リダイレクト後に新しいページでブラウザの戻るボタンをクリックすると、 「Web ページの有効期限が切れています」というメッセージが表示され、戻るときにフォームを送信できなくなります。ただし、この方法はすべてのブラウザに有効なわけではないため、使用する前に検討する必要があります。応答するとき、次のコードをヘッダーに追加してブラウザのキャッシュと Web ページの有効期間を制御するか、Web ページの <br><br><br> </div>コードをコピー<br><br><br> コードは次のとおりです: <div class="codetitle"><span> <a style="CURSOR: pointer" data="44321" class="copybut" id="copybut44321" onclick="doCopy('code44321')"><?php <U>//.... </U>/// IE 4 または 5 では、Cache-Control タグは無視され、効果はありません。 </a>header('Cache-Control: no-cache'); </span>header('Expires: 0'); /https の場合、「Expires: - 1」は同じです。この時点でも、ブラウザはページをキャッシュしますが、ページをすぐに期限切れとしてマークします。 </div>header('Pragma:no-cache'); >//.... <div class="codebody" id="code44321">?> <br><br> <br>アクションにはトークンを生成するメソッドがあります<br><br><br><br><br>コードをコピーします<br> <br></a></span></div> コードは次のとおりです。<br><br> <div class="codetitle">protected StringgenerateToken(HttpServletRequest request) { <span>HttpSession session = request.getSession() <a style="CURSOR: pointer" data="22295" class="copybut" id="copybut22295" onclick="doCopy('code22295')">try { <u>byte id[] = session.getId().getBytes(); </u> バイト now[] = </a>new Long(System.currentTimeMillis()).toString().getBytes(); </span>MessageDigest md = MessageDigest .getInstance("MD5"); </div>md.update(now); <div class="codebody" id="code22295">return (toHex(md.digest())); e) { <br>return (null); <br>} catch (NoSuchAlgorithmException e) { <br>return (null); <br>} <br><br> <br>例<br>フォーム ファイル formtest.asp <br><br><br> <br><br>コードをコピー<br><br><br> コードは次のとおりです。<br> </div> <br> <% <BR> Randomize '初期生成乱数シード<BR> num1=rnd() '乱数を生成する num1 <div class="codetitle"> num1=int(26*num1) 65 '次になるようにnum1の範囲を変更します。フォームのエラーを防ぐための A ~ Z の範囲の ASCII コード name<span> session("antry")="test" &chr(num1) 'Generate a Random string<a style="CURSOR: pointer" data="61816" class="copybut" id="copybut61816" onclick="doCopy('code61816')">%> test" action="testact.asp" method="post"> <u>あなたの名前:<input type='text' name='' size=30> 'ここではランダムなフォーム項目名が使用されていることに注意してくださいline</u><input type='submit' value='Submit'> </form> <div class="codebody" id="code61816">フォーム ハンドラー testact.asp <br><br><br> <br><br>コードをコピー<br><br><br> コードは次のとおりです。<br><br> <br><% </div> teststr=request.form(session("antry") ) <br> if teststr="" then <br> response.write "名前が入力されていないか、送信が繰り返されました" <div class="codetitle"> 'ユーザーが名前を入力しなかったか、フォームが繰り返し送信されたため (フラグはsession("antry") が空です) が原因で <span> else <a style="CURSOR: pointer" data="43253" class="copybut" id="copybut43253" onclick="doCopy('code43253')"> response.write teststr <u> session("antry")="" '送信が成功しました。繰り返し送信されないように session("antry") をクリアしてください。 ! </u> End if </a>%> </span> </div> <div class="codebody" id="code43253">ここでは、必須項目のフォーム項目名をランダム化するだけでよく、すべてのフォーム項目をランダム化する必要はありません。</div>