>백엔드 개발 >PHP 문제 >PHP에서 여러 제출을 피하는 방법

PHP에서 여러 제출을 피하는 방법

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼원래의
2019-09-27 11:17:482718검색

PHP에서 여러 제출을 피하는 방법

다음 상황에서는 양식이 반복적으로 제출됩니다.

·제출 버튼을 두 번 클릭하세요.

·새로고침 버튼을 클릭하세요.

·브라우저 뒤로 버튼을 사용하여 이전 작업을 반복하면 양식이 반복적으로 제출됩니다.

·양식을 반복적으로 제출하려면 브라우저 기록을 사용하세요.

·브라우저에서 HTTP 요청을 복제합니다.

·웹페이지가 악의적으로 새로 고쳐졌습니다.

다음은 몇 가지 해결 방법입니다.

1. js를 사용하여 클릭 후 버튼이 회색으로 변하도록 설정합니다.

<form name=form1 method=”POST” action=”/” target=_blank>
<p>
<input type=”text” name=”T1″ size=”20″>
<input type=”button” value=”提交” οnclick=”javascript:{this.disabled=true;document.form1.submit();}”>
</p>
</form>

버튼을 클릭하면 버튼이 회색으로 바뀌어 클릭할 수 없습니다. 양식을 다시 작성하려면 페이지를 다시 데이터로 채운 후 다시 제출해야 합니다.

관련 추천: "php tutorial"

둘째, session

을 사용하여 세션에 특별한 표시를 하세요. 양식 페이지가 요청되면 특수 문자열이 생성되어 세션에 저장되고 양식의 숨겨진 필드에 배치됩니다. Form 데이터를 접수 및 처리할 때 식별문자열이 존재하는지 확인하고 즉시 세션에서 삭제한 후 정상적으로 데이터를 처리합니다.

양식 제출에 유효한 플래그 문자열이 없으면 양식이 이미 제출되었으며 이 제출이 무시된다는 의미입니다.

이렇게 하면 웹 애플리케이션에 더욱 향상된 XSRF 보호 기능이 제공됩니다.

제출된 페이지를 로드하면 임의의 숫자가 생성됩니다:

$code = mt_rand(0,1000000);

양식의 숨겨진 입력 상자에 저장:

< input type=”hidden” name=”code” value=””>

수신 페이지의 PHP 코드는 다음과 같습니다:

<?php 
session_start(); 
if(isset($_POST[‘code&#39;])) {
if($_POST[‘code&#39;] == $_SESSION[‘code&#39;]){
// 重复提交表单了
}else{
$_SESSION[‘code&#39;] =$_POST[‘code&#39;]; //存储code
}
}?>

3. 쿠키 사용

원칙 및 세션 거의 동일하지만, 사용자의 브라우저가 쿠키를 비활성화하면 이 기능은 더 이상 작동하지 않습니다.

if(isset($_POST[‘submit&#39;])){ 
setcookie(“tempcookie”,””,time()+30); 
header(“Location:”.$_SERVER[PHP_SELF]);exit(); 
} 
if(isset($_COOKIE[“tempcookie”])){ 
setcookie(“tempcookie”,””,0);echo “您已经提交过表单”; 
}

4. 헤더 기능을 사용하여 점프

사용자가 제출 버튼을 클릭하면 데이터 처리 후 다른 페이지로 이동합니다.

if (isset($_POST[‘submit&#39;])) {
header(‘location:success.php&#39;);//处理数据后,转向到其他页面
 
}

5. 데이터베이스를 사용하여 제약 조건 추가

고유 제약 조건을 직접 추가하거나 데이터베이스에 고유 인덱스를 생성합니다. 사용자가 반복적으로 제출한 것으로 확인되면 경고 또는 프롬프트가 직접 표시되거나 첫 번째 메시지만 표시됩니다. 제출된 데이터는 가장 직접적이고 효과적인 방법이며 초기 데이터베이스 설계 및 아키텍처를 신중하게 고려해야 합니다.

6. Post/Redirect/Get 모드

제출 후 페이지 리디렉션을 수행하는 것이 소위 Post-Redirect-Get(PRG) 모드입니다. 즉, 사용자가 양식을 제출하면 제출 성공 정보 페이지로 클라이언트 측 리디렉션을 수행합니다.

아아아아

위 내용은 PHP에서 여러 제출을 피하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

관련 기사

더보기