양식 중복 제출 의 세 가지 상황 과 해결 방법 을 상세히 이야기 하 다.

3962 단어 양식중복 제출
첫 번 째 상황:양식 을 제출 한 후에 다른 조작 을 하지 않 고 페이지 를 직접 새로 고침 하면 양식 은 여러 번 제출 합 니 다.
-servlet 에 출력 한 마디 를 써 서 여러 번 제출 할 지 여 부 를 판단 합 니 다.

System.out.println("    ");
request.getRequestDispatcher("/login_success.jsp").forward(request, response);
-그러면 새로 고침 을 몇 번 하면 컨트롤 러 에'이미 삽입 되 었 습 니 다'몇 개 를 표시 합 니 다.

-근본 원인:Servlet 에서 요청 을 처리 한 후 대상 페이지 로 직접 전송 하면 전체 업무 가 한 번 만 요청 을 보 냅 니 다.그러면 브 라 우 저 에서 리 셋 을 클릭 하면 이전 요청 을 계속 리 셋 합 니 다.
-해결 방법:다른 페이지 로 전송 하지 않 고 방향 을 바 꾸 는 방식 으로 대상 페이지 로 이동

response.sendRedirect("/day0815-session/login_success.jsp");

두 번 째 상황:양식 을 제출 할 때 네트워크 속도 가 떨 어 지면 제출 단 추 를 여러 번 누 르 면 양식 이 중복 제출 될 수 있 습 니 다.
-해결 방법:제출 단 추 를 누 르 면 단 추 를 사용 할 수 없습니다.js 로 완성

<script type="text/javascript">
 window.onload = function(){ 
  //       
  var btn = document.getElementById("btn");
  //           
  btn.onclick = function(){  
   //          
   this.disabled=true; 
   //             ,           
   //      
   this.parentNode.submit(); 
  };
 };
</script><br><br><form action="${pageContext.request.contextPath }/SessionServlet" ><br>user:<input type="text" name="username"><br>password<input type="password" name="pwd"><br><input type="submit" value="  " id="btn"> <br></form>
-"제출"버튼 을 누 르 면 안 됩 니 다!

세 번 째 상황:폼 제출 에 성공 한 후 브 라 우 저 에서 후퇴 단 추 를 누 르 고 페이지 를 새로 고치 지 않 은 다음 제출 단 추 를 누 르 면 폼 을 다시 제출 합 니 다.
-근본 원인:서버 가 요청 을 처리 할 때 중복 요청 여 부 를 확인 하지 않 기 때 문 입 니 다.
-솔 루 션:
token 메커니즘 사용 하기
토 큰
-서버 가 요청 을 처리 하기 전에 브 라 우 저의 token 을 먼저 검사 합 니 다.
-token 은 서버 에서 만 들 고 브 라 우 저 에 게 전달 합 니 다.브 라 우 저 는 서버 에 요청 을 보 낼 때 이 token 을 가지 고 가 야 합 니 다.
-서버 처리 요청 전에 token 이 올 바른 지 확인 하고 올 바 르 면 정상적으로 처리 합 니 다.그렇지 않 으 면 오류 페이지 로 돌아 갑 니 다.
-서버 가 만 든 token 은 한 번 만 사용 가능
-token 은 일반적으로 하나의 유일한 표식 을 사용한다
-jsp 페이지 에서 uid 를 token 으로 가 져 오기
-UUID:32 비트 문자열 은 보통 대상 이나 표 의 유일한 표지 로 기계 코드 와 타임 스탬프(1970 년 1 월 1 일부 터 지금까지)에 따라 생 성 됩 니 다.

<%
 String uuid = UUID.randomUUID().toString();
 session.setAttribute("uuid", uuid);
%><br>${errormsg }<br><form action="${pageContext.request.contextPath }/SessionServlet" ><br>  <input type="text" name="uuid" value="<%=uuid %>"/><br>  user:<input type="text" name="username"><br>  password<input type="password" name="pwd"><br>  <input type="submit" value="  " "><br></form>
-servlet 페이지 에서

String reqUUID = request.getParameter("uuid");
HttpSession session = request.getSession();
String sessUUID = (String) session.getAttribute("uuid");
session.removeAttribute("uuid");
  
if(reqUUID.equals(sessUUID)){
 response.sendRedirect(request.getContextPath()+"/login_success.jsp");
 System.out.println("    ");
}else{
 request.setAttribute("errormsg", "    ");
 request.getRequestDispatcher("/3.jsp").forward(request, response);
}
-양식 중복 제출 의 위해:
-데이터베이스 에 중복 되 고 무의미 한 데 이 터 를 대량으로 삽입 하여 서버 의 자원 을 점용
-처리 요청 서버 에서 요청 이 중 복 된 요청 인지 확인 하지 않 아 악의 적 인 공격 이 발생 함
이상 의 상세 한 설명 표 가 중복 제출 한 세 가지 상황 과 해결 방법 은 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 께 참고 가 되 고 저희 도 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기