토큰 기반 처리는 일회성 접근 방식입니다. 코드 복사 코드는 다음과 같습니다. function formsubmit() { <BR>Today = new Date(); <BR>var NowHour = Today.getHours() <BR>var NowMinute = Today.getMinutes() <BR>var NowSecond = Today .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>return false <br>} <br>document.forms.formsubmitf.submit(); /script> <br> <br> <br>웹 페이지 뒤로 캐싱 방지 <br>브라우저의 캐시와 페이지의 유효 기간을 제어하여 리디렉션 후 새 페이지에서 브라우저 뒤로 버튼을 클릭하면 "웹 페이지가 만료되었습니다"라는 메시지가 표시됩니다. 이렇게 하면 돌아갈 때 양식이 제출되지 않습니다. 하지만 이 방법은 모든 브라우저에 적용되는 것은 아니므로 사용하기 전에 고려하시기 바랍니다. 응답할 때 다음 코드를 헤더에 추가하여 브라우저의 캐시와 웹페이지의 유효 기간을 제어하거나 웹페이지의 <meta>에 직접 추가하세요. <br><br> </div> <br><br>코드 복사<br><div class="codetitle"><span> 코드는 다음과 같습니다. <a style="CURSOR: pointer" data="44321" class="copybut" id="copybut44321" onclick="doCopy('code44321')"><u> </u><?php </a>//..... </span>/// IE 4 또는 5에서는 Cache-Control 태그가 무시되고 아무런 효과가 없습니다. </div>header('Cache-Control: no-cache') <div class="codebody" id="code44321">header('Expires: 0'); /Valid for https, "Expires: - 1"은 현재 브라우저가 페이지를 캐시하지만 페이지가 즉시 만료되는 것으로 표시합니다. <BR>header('Pragma:no-cache'); >//.... <BR>?> <br><br> <br>액션에는 토큰을 생성하는 방법이 있습니다<br><br><br><br><br>코드 복사</a></span></div> <br><br> 코드는 다음과 같습니다.<div class="codetitle"> <span> <a style="CURSOR: pointer" data="22295" class="copybut" id="copybut22295" onclick="doCopy('code22295')">protected String generateToken(HttpServletRequest request) { <u>HttpSession session = request.getSession() </u>try { </a>byte id[] = session.getId().getBytes(); </span> byte now[] = </div>new Long(System.currentTimeMillis()).toString().getBytes() <div class="codebody" id="code22295">MessageDigest md = MessageDigest .getInstance("MD5"); <br>md.update(now) <br>return (toHex(md.digest())); e) { <br>return(null); <br>} catch(NoSuchAlgorithmException e) { <br>return(null) <br>} <br>} <br><br> <br>asp 예시<br>양식 파일 formtest.asp <br><br><br> <br><br>코드 복사<br> </div> <br> 코드는 다음과 같습니다.<br><br> <div class="codetitle"> <% <span> Randomize '초기 생성 난수 시드<a style="CURSOR: pointer" data="61816" class="copybut" id="copybut61816" onclick="doCopy('code61816')"> num1=rnd() '난수 num1 생성 <U> num1=int(26*num1) 65 ' num1의 범위를 다음이 되도록 수정합니다. 양식 이름의 오류를 방지하기 위한 A-Z 범위의 Ascii 코드</U> session("antry")="test" &chr(num1) '임의의 문자열 생성</a>%> test" action="testact.asp" method="post"> 귀하의 이름:<input type='text' name='' size=30> '여기에서는 임의의 양식 항목 이름이 사용됩니다. line</div><input type='submit' value='Submit'> <div class="codebody" id="code61816"></form> <br><br> <br>양식 처리기 testact.asp <br><br><br> <br><br>코드 복사<br><br><br> 코드는 다음과 같습니다.</div> <br> <br><% <div class="codetitle"> teststr=request.form(session("antry") ) <span> if teststr="" then <a style="CURSOR: pointer" data="43253" class="copybut" id="copybut43253" onclick="doCopy('code43253')"> response.write "이름이 입력되지 않았거나 반복 제출되었습니다." <U> 'Due to 사용자가 이름을 입력하지 않았거나 양식이 반복적으로 제출되었습니다(플래그는 session("antry")가 비어 있음) 원인 </U> else </a> response.write teststr </span> session("antry")="" '제출 성공, 세션("antry")을 지워 반복 제출을 방지하세요! ! </div> End if <div class="codebody" id="code43253">%> <br><br> <br>여기서 필수 항목의 양식 항목 이름만 무작위로 지정하면 되며 모든 양식 항목을 무작위로 지정할 필요는 없습니다.