>  기사  >  백엔드 개발  >  Ajax 양식의 반복 제출을 방지하기 위해 PHP에서 세션 토큰을 사용하십시오.

Ajax 양식의 반복 제출을 방지하기 위해 PHP에서 세션 토큰을 사용하십시오.

伊谢尔伦
伊谢尔伦원래의
2016-12-01 11:30:172062검색

양식의 반복 제출을 방지하는 두 가지 주요 방법은 다음과 같습니다.

1) 리디렉션을 통해(Ajax가 아닌 양식 제출)

2) 세션 토큰을 통해(세션 토큰)

클라이언트가 페이지를 요청하면 서버는 난수를 생성하여 세션에 넣은 다음 클라이언트가 처음으로 제출하면 난수를 클라이언트에 보냅니다. 서버로 전송되면 서버는 난수를 받아 세션에 저장된 난수와 비교하게 되는데, 이때 서버는 이를 첫 번째 제출로 간주합니다. 이때 제출이 다시 반복되면 클라이언트가 서버에 보낸 난수는 이전과 동일하지만 서버의 난수는 변경된 것입니다. 둘이 다르면 서버는 이를 반복 제출로 간주합니다.

난수를 생성하고 md5를 사용하여 암호화합니다.

$_token = md5(microtime()+rand(1,10000));
$_SESSION['_token'] = $_token;

값을 클라이언트에 보내고 다음 형식의 숨겨진 필드로 제출합니다.

<input type="hidden" value="<?php echo $_token;?>" name="_token"/>

그런 다음 제출할 때 제출된 데이터를 서버 세션의 데이터와 비교합니다. 비어 있거나 같지 않으면 불법적인 작업으로 간주됩니다.

if(!isset($_POST(&#39;_token&#39;))){
    echo json_encode(array(&#39;status&#39;=>&#39;failed&#39;,&#39;msg&#39;=>&#39;非法操作!&#39;));
    exit();
}
if(isset($_POST[&#39;_token&#39;]) && $_POST[&#39;_token&#39;]!=$_SESSION[&#39;_token&#39;]){
    echo json_encode(array(&#39;status&#39;=>&#39;failed&#39;,&#39;msg&#39;=>&#39;表单只能提交一次,不能重复提交!&#39;));
    exit();
}


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