毎日のWeb開発では、ユーザーエクスペリエンスを最適化し、システムの安定性を向上させるために、開発者は繰り返しフォームの提出または頻繁なユーザーの運用に対処する必要があることがよくあります。アンチシェイクおよび繰り返しの提出テクノロジーは、これらの問題を解決するための重要な手段です。
いわゆるアンチシェイクは、操作が高頻度でトリガーされる場合、操作は最後のトリガー後に遅延でのみ実行され、短時間で繰り返される実行を避けることを意味します。
バックエンドPHPでJavaScriptのようなイベントを直接聴くことはありませんが、論理的判断と遅延制御を通じて同様の効果を達成することもできます。 PHPアンチシェイクメカニズムをシミュレートするコード例は次のとおりです。
<?php
class Debounce
{
private $callback;
private $delay;
private $timer;
public function __construct($callback, $delay)
{
$this-> callback = $ callback;
$ this-> delay = $ delay;
}
パブリック関数debounce()
{
if($ this-> Timer){
ClearTimeout($ this-> Timer);
}
$ this-> timer = setimeout($ this-> callback、$ this-> delay);
}
}
// usage $ debounce = new debounce(function(){
//必要とするされた動作しますを実行}、1000);
//イベントがトリガーされたときにdebounce()method $ debounce-> debounce()を電話び外します。
?>PHP自体には、ブラウザサイドのイベント監視、SetimeOut、およびClearTimeOut関数がないことに注意する必要があります。この例のSettimeOutはシミュレーションのアイデアであり、フロントエンドに移植するか、JavaScriptコントロールを使用してアンチシェイクを実現するのに適しています。
反復済みの提出物は、アンチシェイクよりもフォームの提出物を処理するために一般的に使用されます。一般的な慣行は、ユニークなフォームトークン(トークン)を導入して、提出時の最初の提出であることを確認することです。
以下は、完全なPHPアンチリピートのコミット実装の例です。
<?php
class FormToken
{
private $token;
public function __construct()
{
if (!isset($_SESSION['token'])) {
$_SESSION['token'] = bin2hex(random_bytes(32));
}
$this-> token = $ _session ['token'];
}
パブリック関数GenerateToken()
{
戻る ' <input type="hidden" name="token" value="' . $this->token . '"> ';
}
パブリック関数elibalateToken()
{
if(isset($ _ post ['token'])&& $ _post ['token'] === $ $ $ $ {> token){
//フォーム提外動作しますを実行} else {
//違法なリクエスト、エラーメッセージをそしてえる}
}
}
// usage $ formtoken = new formtoken();
echo $ formtoken-> generatetoken();
$ formtoken-> validateToken();
?>このようにして、各フォームの提出には一意の識別子が添付され、サーバー側で比較されるため、同じリクエストの繰り返し処理を回避します。
実際の開発では、アンチシェイクおよび反復防止の提出は、ユーザーの誤解を効果的に回避できますが、該当するシナリオはわずかに異なります。
アンチシェイクおよび反復防止提出テクノロジーの理解と実用的な応用を通じて、ユーザーエクスペリエンスを効果的に改善し、システムリソースを乱用から保護できます。開発者は、より効率的で安定したシステム動作を実現するために、ビジネスシナリオに従ってこれら2つのテクノロジーを合理的に選択または組み合わせる必要があります。