매일 웹 개발에서 사용자 경험을 최적화하고 시스템 안정성을 향상시키기 위해 개발자는 종종 반복적 인 양식 제출 또는 빈번한 사용자 운영을 처리해야합니다. 방지 및 반복 방지 제출 기술은 이러한 문제를 해결하는 핵심 수단입니다.
소위 안티 셰이크는 조작이 고주파수로 트리거 될 때 짧은 시간에 반복적 인 실행을 피하기 위해 마지막 트리거 후 지연에서만 작동이 수행된다는 것을 의미합니다.
백엔드 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 ();
?>이러한 방식으로, 각 양식 제출에는 고유 식별자가 동반되며 서버 측에서 비교하여 동일한 요청의 반복 처리를 피할 수 있습니다.
실제 발전에서, 반 쉐이크 및 반복 방지 제출은 사용자의 오용을 효과적으로 피할 수 있지만 적용 가능한 시나리오는 약간 다릅니다.
방지 및 반복 방지 제출 기술의 이해와 실용적 적용을 통해 사용자 경험을 효과적으로 개선 할 수 있으며 시스템 자원은 남용으로부터 보호 될 수 있습니다. 개발자는 비즈니스 시나리오에 따라이 두 기술을 합리적으로 선택하거나 결합하여보다 효율적이고 안정적인 시스템 행동을 달성해야합니다.