방지 기능은 사용자가 이벤트를 여러 번 빠르게 트리거 할 때 이벤트 처리 기능을 한 번만 실행할 수 있고 마지막 방아쇠 후 일정 기간 내에 재 실행이 방지된다는 사실을 말합니다. 웹 개발에서 반복되는 제출은 데이터 중복성, 서버 부담 증가 및 논리적 오류로 이어질 수 있기 때문에 사용자가 양식을 반복적으로 제출하는 것을 방지하는 것이 매우 중요합니다.
간단하고 효과적인 방법은 세션을 사용하여 사용자의 마지막 제출의 타임 스탬프를 기록하고 현재 시간과 마지막 제출 시간 간의 간격을 비교하여 제출물을 허용 할 수 있는지 여부를 결정하는 것입니다. 다음 예는 특정 구현을 보여줍니다.
// 세션을 켭니다 session_start (); <p>// 현재 타임 스탬프를 얻습니다<br> $ currentTimeStamp = time ();</p> <p>// 마지막 제출 된 제출물의 타임 스탬프를 얻습니다<br> $ lasttimestamp = $ _session [ 'lasttimestamp'] ?? 0;</p> <p>// 시간 간격이 지정된 방지 시간보다 적은지 여부를 결정합니다 (예 : 5 초)<br> if ($ currentTimestamp- $ lasttimestamp <5) {<br> echo '제출을 반복하지 마십시오';<br> 출구;<br> }</p> <p>// 제출의 마지막 타임 스탬프를 업데이트합니다<br> $ _session [ 'lasttimestamp'] = $ currentTimeStamp;<br>
이 코드는 사용자가 두 제출 시간 간격이 설정 값보다 적은지 여부를 결정하여 짧은 시간 내에 반복적으로 양식을 제출하는 것을 피합니다. 그것을 사용할 때 스크립트가 Session_Start () 호출을 시작하여 세션 지원을 활성화하십시오.
또 다른 더 안전한 방지 방법은 토큰을 사용하는 것입니다. 양식이 렌더링 될 때마다 고유 한 토큰이 생성되고 세션에 저장되며 양식에 숨겨진 필드로 배치됩니다. 제출시 배경은 토큰이 일치하는지 여부를 확인하여 중복 제출인지 여부를 확인합니다.
// 세션을 켭니다 session_start (); <p>// 고유 한 토큰을 생성합니다<br> $ token = md5 (uniqid (rand (), true);</p> <p>// 세션에서 토큰을 저장합니다<br> $ _session [ '토큰'] = $ 토큰;</p> <p>// 양식으로 토큰을 전달합니다<br> 에코 '<input type="hidden" name="token" value="' . $token . '"> ';;</p> <p>// 양식 제출을 처리 할 때 토큰을 확인하십시오<br> if ($ _post [ 'token']! == $ _session [ 'token']) {<br> echo '제출을 반복하지 마십시오';<br> 출구;<br> }</p> <p>// 양식 데이터를 계속 처리합니다<br> // ...<br>
이 방법은 양식이 반복적으로 제출되는 것을 효과적으로 방지하며 위조하기가 어렵습니다. 더 엄격한 데이터 보호가 필요한 시나리오에 적합합니다.
세션 타임 스탬프 제어 및 토큰 검증의 두 가지 방법을 통해 PHP 개발자는 셰이크 방지 기능을 유연하게 구현하여 사용자의 반복적 인 양식 제출으로 인한 문제를 효과적으로 피할 수 있습니다. 실제 프로젝트 요구 사항 및 안전 요구 사항에 따라 선택할 수있는 특정 계획을 조정할 수 있습니다. 위의 예제가 프로젝트 개발에 대한 실질적인 참조를 제공 할 수 있기를 바랍니다.