웹 응용 프로그램에서 의도하지 않은 양식 다시 제출을 방지하려면 어떻게 해야 합니까?

Susan Sarandon
풀어 주다: 2024-11-13 00:43:02
원래의
506명이 탐색했습니다.

How Can I Prevent Unintended Form Resubmission in Web Applications?

의도하지 않은 양식 재제출 방지

페이지 새로 고침으로 인한 양식 재제출은 웹 애플리케이션에서 흔히 발생하는 문제입니다. 이 문제를 효과적으로 처리하려면 다음 전략을 사용하는 것이 중요합니다.

제출 후 리디렉션

동일한 페이지에 응답을 표시하는 대신 사용자를 양식이 제출되면 별도의 페이지로 이동합니다. 이렇게 하면 새로 고친 페이지가 로드될 때 이미 처리된 POST 요청이 반복되지 않고 새로운 GET 요청이 됩니다.

예:

// submit
// set success flash message (you are using a framework, right?)
header('Location: /path/to/record');
exit;
로그인 후 복사

브라우저 캐싱 비활성화

브라우저가 양식을 캐싱하는 것을 방지하려면, PHP 스크립트에 다음 헤더를 추가하세요.

header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
로그인 후 복사

고유 페이지 토큰

각 양식 제출에 대해 서버에 고유 토큰을 생성합니다. 이 토큰을 양식의 숨겨진 필드로 포함하고 처리하기 전에 확인하세요. 토큰이 일치하지 않거나 누락된 경우 중복 제출로 요청을 삭제합니다.

예(세션 토큰 포함):

<?php
session_start();

// Generate a unique token and store it in the session
$token = md5(uniqid(mt_rand(), true));
$_SESSION['token'] = $token;

?>

<!DOCTYPE html>
<html>
<body>

<form action="submit.php" method="post">
  <input type="text" name="name">
  <input type="hidden" name="token" value="<?php echo $token; ?>">
  <input type="submit" value="Submit">
</form>

</body>
</html>
로그인 후 복사
<?php
session_start();

// Get the submitted token
$token = $_POST['token'];

// Check if the token matches the session token
if ($token != $_SESSION['token']) {
  // Discard the request
} else {
  // Process the form data
}
로그인 후 복사

결론

이러한 기술을 구현하면 원치 않는 형식을 효과적으로 방지할 수 있습니다. 페이지 새로 고침으로 인한 재제출을 방지하고 웹 애플리케이션이 의도한 대로 작동하는지 확인하세요.

위 내용은 웹 응용 프로그램에서 의도하지 않은 양식 다시 제출을 방지하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿