>백엔드 개발 >PHP 문제 >PHP에서 양식을 반복적으로 제출하는 것을 방지하는 방법

PHP에서 양식을 반복적으로 제출하는 것을 방지하는 방법

(*-*)浩
(*-*)浩원래의
2019-09-20 13:40:302556검색

php는 양식의 반복 제출을 방지합니다

PHP에서 양식을 반복적으로 제출하는 것을 방지하는 방법

해결책 1: 해결을 위해 쿠키 메커니즘 도입

제출 페이지 코드는 다음과 같습니다. a.php 코드는 다음과 같습니다. (권장 학습: PHP 프로그래밍 항목에서) to proficiency)

<form id="form1" name="form1" method="post" action="t2.php">
    <p>说明
        <input type="text" name="titile" />
</p>
    <p>
        <input type="submit" name="Submit" value="提交" />
</p>
</form>
<?php
setcookie("onlypost", &#39;t&#39;);         //设置cookie,可以带上时间值。像有些论坛防止灌水就可以将你的一些基本信息存放到里面。
?>

Php code

<?php  
if($_COOKIE[&#39;onlypost&#39;] == &#39;t&#39;){  
    print_r($_COOKIE);  
    //处理提交的内容           如果验证成功则处理  
    print "ok";  
    setcookie("onlypost", &#39;f&#39;); //改变cooike值删除也可以了  
}  
?>

위 처리의 단점: 클라이언트가 쿠키를 비활성화하는 경우 이 방법은 효과가 없으므로 주의하시기 바랍니다.

해결책 2: 세션 사용(JSP 처리 방법과 동일)

PHP의 세션 기능을 사용하면 양식의 반복 제출을 피할 수도 있습니다. 세션은 서버측에 저장됩니다. 세션 변수는 PHP가 실행되는 동안 변경될 수 있습니다. 따라서 다음에 이 변수에 액세스하면 새로 할당된 값을 얻게 됩니다. 따라서 세션 변수를 사용하여 제출된 값을 기록할 수 있습니다. 양식이 일치하지 않으면 반복적으로 제출하는 사용자로 간주됩니다.

페이지 A의 코드:

<?php
session_start();                //根据当前SESSION生成随机数
$code = mt_rand(0,1000000);
$_SESSION[&#39;code&#39;] = $code;      //将此随机数暂存入到session
?>
<form id="form1" name="form1" method="post" action="t2.php">
    <p>说明
        <input type="text" name="titile" />
        <input type="hidden" name="originator" value="<?php echo $code;?>">
</p>
    <p>
        <input type="submit" name="Submit" value="提交" />
</p>
</form>
B页面:
<?php
session_start();
if(isset($_POST[&#39;originator&#39;])) {
    if($_POST[&#39;originator&#39;] == $_SESSION[&#39;code&#39;]){
        echo "ok";
        unset($_SESSION["code"]);               //将其清除掉此时再按F5则无效
    }else{
    echo "请不要刷新本页面或重复提交表单";
    }
}?>

해결책 3: 서버 측에서 리디렉션 처리 수행

if (isset($_POST[&#39;action&#39;]) && $_POST[&#39;action&#39;] == &#39;submitted&#39;) {
// 处理数据,如插入数据后,立即转向到其他页面
header(&#39;location:submits_success.php&#39;);     //效果与JSP里面的sendRedirect类似
}

위 내용은 PHP에서 양식을 반복적으로 제출하는 것을 방지하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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