때때로 양식 제출이 의도치 않게 연속해서 여러 번 실행되어 원치 않는 동작과 데이터 불일치가 발생할 수 있습니다. 이러한 상황은 버튼을 여러 번 클릭하거나 양식 처리 속도가 느린 등 다양한 요인으로 인해 발생할 수 있습니다. PHP는 이러한 다중 제출을 방지하여 데이터 무결성을 보장하는 기술을 제공합니다.
다중 제출을 방지하기 위해 널리 사용되는 접근 방식은 양식이 표시될 때마다 생성되는 토큰을 활용하는 것입니다. 그런 다음 이 토큰은 양식과 함께 제출되고 서버 측에서 유효성이 검사됩니다. 이 접근 방식의 주요 이점은 CSRF(Cross-Site Request Forgery) 공격과 재생 공격을 모두 완화할 수 있는 잠재력에 있습니다.
아래 예는 고유한 각 양식 표시에 대한 토큰을 양식 제출 시 유효성 검사와 함께 제공합니다.
<?php session_start(); /** * Generates a unique token for the form * @return string The token */ function getToken(){ $token = sha1(mt_rand()); if(!isset($_SESSION['tokens'])){ $_SESSION['tokens'] = array($token => 1); } else{ $_SESSION['tokens'][$token] = 1; } return $token; } /** * Validates the token and removes it from the list of valid tokens * @param string $token The token * @return bool Validation status */ function isTokenValid($token){ if(!empty($_SESSION['tokens'][$token])){ unset($_SESSION['tokens'][$token]); return true; } return false; } // Check if a form has been submitted $postedToken = filter_input(INPUT_POST, 'token'); if(!empty($postedToken)){ if(isTokenValid($postedToken)){ // Process form } else{ // Handle error } } // Get a token for the currently displayed form $token = getToken(); ?> <form method="post"> <fieldset> <input type="hidden" name="token" value="<?php echo $token; ?>"/> <!-- Form content --> </fieldset> </form>
토큰 기반 접근 방식과 리디렉션을 결합하면 적절한 보장을 통해 사용자 경험이 향상됩니다. 뒤로 및 앞으로 탐색 동작. POST / 리디렉션 / GET 디자인 패턴을 구현하면 사용자가 뒤로 버튼을 클릭하거나 페이지를 새로 고칠 때 실수로 다시 제출하는 것을 방지할 수 있습니다.
위 내용은 PHP에서 여러 양식 제출을 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!