매일 웹 개발에서 사용자 경험을 최적화하고 시스템 안정성을 향상시키기 위해 개발자는 종종 반복적 인 양식 제출 또는 빈번한 사용자 운영을 처리해야합니다. 방지 및 반복 방지 제출 기술은 이러한 문제를 해결하는 핵심 수단입니다.
소위 안티 셰이크는 조작이 고주파수로 트리거 될 때 짧은 시간에 반복적 인 실행을 피하기 위해 마지막 트리거 후 지연에서만 작동이 수행된다는 것을 의미합니다.
백엔드 PHP에서 JavaScript와 같은 이벤트를 직접 듣지는 않지만 논리적 판단 및 지연 제어를 통해 유사한 효과를 달성 할 수 있습니다. 다음은 PHP 방지 메커니즘을 시뮬레이션하는 코드 예입니다.
<?php class Debounce { private $callback; private $delay; private $timer; public function __construct($callback, $delay) { $this-> 콜백 = $ 콜백; $ this-> 지연 = $ 지연; } 공개 기능 Debounce () { if ($ this-> timer) { 클리어 타임 아웃 ($ this-> 타이머); } $ this-> timer = settimeout ($ this-> 콜백, $ this-> Delay); } } // 예제 사용 $ debounce = new debounce (function () { // 요청 된 조작을 수행}, 1000); // 이벤트가 트리거되면 debounce () 메소드를 호출하십시오. ?>
PHP 자체에는 브라우저 측 이벤트 모니터링, Settimeout 및 Cleartimeout 기능이 없습니다. 이 예제의 설정 타임 아웃은 시뮬레이션 아이디어로, 프론트 엔드로 포팅하거나 JavaScript 컨트롤을 사용하여 안티 쉐이크를 달성하는 데 더 적합합니다.
반복 방지 제출은 셰이크 방지보다 형태 제출을 처리하는 데 더 일반적으로 사용됩니다. 일반적인 관행은 제출시 첫 번째 제출물인지 확인하기 위해 고유 한 양식 토큰 (토큰)을 소개하는 것입니다.
다음은 완전한 PHP 방지 커밋 구현 예입니다.
<?php class FormToken { private $token; public function __construct() { if (!isset($_SESSION['token'])) { $_SESSION['token'] = bin2hex(random_bytes(32)); } $this-> 토큰 = $ _session [ '토큰']; } 공개 기능 generateToken () { 반품 ' <input type="hidden" name="token" value="' . $this->token . '"> ';; } 공개 기능 validAteToken () { if (isset ($ _ post [ 'token']) && $ _post [ 'token'] === $ this-> token) { // 양식 제출 작업 수행} else { // 불법 요청, 오류 메시지 제공} } } // 예제 usage $ formtoken = new FormToken (); echo $ formtoken-> generateToken (); $ formtoken-> validAteToken (); ?>
이러한 방식으로, 각 양식 제출에는 고유 식별자가 동반되며 서버 측에서 비교하여 동일한 요청의 반복 처리를 피할 수 있습니다.
실제 발전에서, 반 쉐이크 및 반복 방지 제출은 사용자의 오용을 효과적으로 피할 수 있지만 적용 가능한 시나리오는 약간 다릅니다.
방지 및 반복 방지 제출 기술의 이해와 실용적 적용을 통해 사용자 경험을 효과적으로 개선 할 수 있으며 시스템 자원은 남용으로부터 보호 될 수 있습니다. 개발자는 비즈니스 시나리오에 따라이 두 기술을 합리적으로 선택하거나 결합하여보다 효율적이고 안정적인 시스템 행동을 달성해야합니다.