현재 위치: > 최신 기사 목록> PHP 방지 기술 : 높은 동시성 시나리오에서 반복 데이터 제출을 피하는 방법

PHP 방지 기술 : 높은 동시성 시나리오에서 반복 데이터 제출을 피하는 방법

M66 2025-07-12

PHP 방지 기술 : 높은 동시성 시나리오에서 반복 데이터 제출을 피하는 방법

동시성이 높은 시나리오에서 사용자는 종종 버튼을 클릭하거나 양식을 제출할 수있어 서버가 여러 동일한 요청을 수신하여 데이터의 반복적 인 데이터 제출을 유발할 수 있습니다. 이 문제를 효과적으로 해결하기 위해 "셰이크 방지"라는 기술을 사용할 수 있습니다. 이 기술은 사용자의 반복 트리거 이벤트로 인한 중복 제출 문제를 피하는 데 도움이 될 수 있습니다.

안티 셰이크 기술이란 무엇입니까?

방지 기술은 이벤트 처리 메커니즘으로, 이벤트가 다시 트리거되면 타이밍이 다시 시작되는 지연 시간을 주로 설정하는 이벤트 처리 메커니즘입니다. 해당 작업은 이벤트가 일정 기간 동안 다시 시작되지 않을 때만 수행됩니다. 데이터 제출 시나리오 에서이 기술은 버튼을 클릭하거나 양식을 여러 번 제출할 때 사용자가 발생하는 반복 데이터 제출 문제를 효과적으로 피할 수 있습니다.

PHP에서 셰이크 방지 기술 구현

PHP에서, 방지 상태는 세션 및 Redis와 같은 캐시 메커니즘을 통해 기록되어 지정된 시간 간격 내에 중복 제출이 발생하지 않도록 할 수 있습니다. 다음은 세션을 사용한 셰이크 방지 처리를위한 샘플 코드입니다.

 <?php
// 셰이크 방지 시간 간격,초 단위
$debounceInterval = 5;

// 캐시 키 이름
$cacheKey = 'submit_debounce_key';

// 안티 셰이크 마크를 확인하십시오
if (!isset($_SESSION[$cacheKey])) {
    // 존재하지 않는 경우,안티 셰이크 마크를 설정하십시오,만료 시간을 설정하십시오
    $_SESSION[$cacheKey] = 1;
    $_SESSION[$cacheKey . '_expire'] = time() + $debounceInterval;
    // 해당 작업을 수행하십시오
    // TODO: 처리 양식 제출 로직
    // 셰이크 방지 마크를 제거하십시오
    unset($_SESSION[$cacheKey], $_SESSION[$cacheKey . '_expire']);
} else {
    // 셰이크 방지 마크가 존재합니다,만료되었는지 여부를 결정하십시오
    if ($_SESSION[$cacheKey . '_expire'] <= time()) {
        // 명확한 만료 된 안티 셰이크 마크,다시 놓기
        unset($_SESSION[$cacheKey], $_SESSION[$cacheKey . '_expire']);
        $_SESSION[$cacheKey] = 1;
        $_SESSION[$cacheKey . '_expire'] = time() + $debounceInterval;
        // 해당 작업을 수행하십시오
        // TODO: 처리 양식 제출 로직
        // 셰이크 방지 마크를 제거하십시오
        unset($_SESSION[$cacheKey], $_SESSION[$cacheKey . '_expire']);
    } else {
        // 만료되지 않은 경우,이는이 요청이 반복 제출임을 의미합니다,처리를 수행 할 수 없습니다,또는 해당 프롬프트 정보를 반환하십시오
        echo '제출을 반복하지 마십시오';
        exit;
    }
}
?>

이 코드 예제에서 먼저 셰이크 방지 시간 간격`$ debounceinterval`을 정의하고 캐시 키 이름`$ cachekey`를 설정합니다. 처음으로 양식을 제출할 때 시스템은 세션에서 셰이크 방지 마크를 설정하고 마크에 대한 만료 시간을 설정합니다. 다음에 양식을 제출할 때 시스템은 셰이크 방지 마크가 존재하고 만료되었는지 확인합니다. 만료되면 마크를 재설정하고 양식 제출 로직을 실행하십시오. 만료되지 않은 경우 "제출을 반복하지 마십시오"라는 프롬프트가 반환됩니다.

요약

셰이크 방지 기술은 높은 동시성 시나리오에서 반복 데이터 제출 문제를 효과적으로 해결할 수 있으며, 합리적인 캐싱 메커니즘은 시스템의 안정성과 사용자 경험을 크게 향상시킬 수 있습니다. PHP는 셰이크 방지 기술을 구현하는 간단하고 사용하기 쉬운 방법을 제공하며 개발자는 프로젝트 요구에 따라 유연하게 조정할 수 있습니다.