>  기사  >  웹 프론트엔드  >  일반적인 양식 중복 제출 문제 및 Solutions_javascript 기술

일반적인 양식 중복 제출 문제 및 Solutions_javascript 기술

WBOY
WBOY원래의
2016-05-16 17:15:411058검색

/**
*
* @authors Benjamin
* @date 2013-11-13 10:16:59
*/

1. 일반적인 중복 제출 문제
a>제출 버튼을 두 번 클릭하세요.
b>새로고침 버튼을 클릭하세요.
c>브라우저 뒤로 버튼을 사용하여 이전 작업을 반복하면 양식이 반복적으로 제출됩니다.
d> 브라우저 기록을 사용하여 양식 제출을 반복합니다.
e> 브라우저의 HTTP 요청이 중복됩니다.

2. 양식 반복 제출 방지 방법
 a> 양식이 제출된 후 현재 버튼을 비활성화하거나 버튼의 클릭 이벤트 또는 기본 이벤트를 취소합니다. 이 접근 방식은 참을성 없는 사용자가 버튼을 여러 번 클릭하는 것을 방지합니다. 그러나 문제가 있습니다. 클라이언트에서 Javascript가 비활성화된 경우 이 방법은 현대 웹 사이트에서는 효과적이지 않습니다.

b>게시/리디렉션/가져오기 모드. 제출 후 페이지 리디렉션을 수행하는 것은 소위 PRG(Post-Redirect-Get) 패턴입니다. 즉, 사용자가 양식을 제출하면 클라이언트 측 리디렉션을 수행하고 제출 성공 정보 페이지로 이동합니다. 이렇게 하면 사용자가 F5 키를 눌러 발생하는 반복 제출을 방지할 수 있으며 브라우저 양식의 반복 제출에 대한 경고도 표시되지 않으며 브라우저의 앞으로 및 뒤로 버튼을 눌러 발생하는 동일한 문제도 제거할 수 있습니다.

c> 쿠키를 사용하여 반복적인 양식 제출 처리
PHP 구현:

코드 복사 다음과 같습니다:

 lt;?php
  if(isset($_POST['go'])){
  setcookie("tempcookie","",time() 30 );
header("위치:".$_SERVER[PHP_SELF]);exit();
} if(isset($_COOKIE["tempcookie"])){
setcookie("tempcookie", "", 0);echo "이미 양식을 제출했습니다.";
  ?>

 d> 양식 페이지가 요청되면 특수 문자열이 생성되어 세션에 저장되고 양식의 숨겨진 필드에 배치됩니다. Form 데이터를 접수 및 처리할 때 식별문자열이 존재하는지 확인하고 즉시 세션에서 삭제한 후 정상적으로 데이터를 처리합니다. 양식 제출에 유효한 플래그 문자열이 없는 것으로 확인되면 양식이 이미 제출되었으며 이 제출이 무시된다는 의미입니다. 이를 통해 웹 애플리케이션에 더욱 향상된 XSRF 보호 기능이 제공됩니다.

e>데이터베이스에 제약 조건을 추가합니다. 중복 데이터를 방지하려면 데이터베이스에 고유 제약 조건을 추가하거나 고유 인덱스를 생성하세요. 이는 데이터의 중복 제출을 방지하는 가장 효과적인 방법입니다.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.