ホームページ  >  記事  >  バックエンド開発  >  PHP 手ぶれ防止および重複送信防止テクノロジー: 適切なソリューションを選択する方法

PHP 手ぶれ防止および重複送信防止テクノロジー: 適切なソリューションを選択する方法

WBOY
WBOYオリジナル
2023-10-12 09:54:331045ブラウズ

PHP 防抖和防重复提交技术:如何选择合适的方案

PHP アンチシェイクおよびアンチ重複送信テクノロジ: 適切なソリューションを選択するには、特定のコード例が必要です

Web 開発におけるアンチシェイクおよびアンチ重複提出は、共通の技術要件である 2 つの異なるものです。ユーザー操作やフォームの送信などのシナリオを扱う場合、繰り返しの送信や頻繁なリクエストを避けるために、ユーザーが一定期間内に 1 つのリクエストのみをトリガーできるようにする必要があります。この記事では、適切なソリューションを選択する方法について説明し、具体的な PHP コード例を示します。

1. アンチシェイク テクノロジー

アンチシェイク テクノロジーとは、イベントが連続的にトリガーされた場合、最後の操作のみが実行され、中間の操作は無視されることを意味します。通常はタイマーを設定しますが、指定した時間内に複数のイベントが発生した場合は、リクエストが 1 回だけ送信されるように、最後のイベントのみが保持されます。

手ぶれ補正は、JavaScript や PHP の使用など、さまざまな方法で実装できます。以下は、PHP を使用して実装された手ぶれ補正のサンプル コードです。

<?php
  
class Debounce
{
    private $callback;
    private $delay;
    private $timer;
  
    public function __construct($callback, $delay)
    {
        $this->callback = $callback;
        $this->delay = $delay;
    }
  
    public function debounce()
    {
        if($this->timer) {
            clearTimeout($this->timer);
        }
  
        $this->timer = setTimeout($this->callback, $this->delay);
    }
}
  
// 示例用法
$debounce = new Debounce(function() {
    // 执行请求的操作
}, 1000);
  
// 触发事件时调用 debounce() 方法
$debounce->debounce();
?>

2. 再送信防止技術

再送信防止技術は、ユーザーが同じフォームを送信したり、同じフォームを送信したりすることを防止します。同じリクエストが複数回あります。一般的な解決策は、一意のトークンをフォームに追加し、サーバー側で検証することで、同じフォーム要求が 1 回だけ処理されるようにすることです。

以下は、PHP を使用して繰り返し送信を防止するサンプル コードです:

<?php
  
class FormToken
{
    private $token;
  
    public function __construct()
    {
        if(!isset($_SESSION['token'])) {
            $_SESSION['token'] = bin2hex(random_bytes(32));
        }
  
        $this->token = $_SESSION['token'];
    }
  
    public function generateToken()
    {
        return '<input type="hidden" name="token" value="' . $this->token . '">';
    }
  
    public function validateToken()
    {
        if(isset($_POST['token']) && $_POST['token'] === $this->token) {
            // 执行表单提交的操作
        } else {
            // 非法请求,给出错误提示
        }
    }
}
  
// 示例用法
$formToken = new FormToken();
echo $formToken->generateToken();
$formToken->validateToken();
?>

このサンプル コードを使用すると、フォームに非表示のトークン フィールドを追加し、フォームの送信時に実行できます。 。 チェック。検証に合格したリクエストのみが処理されます。

3. 適切なソリューションを選択する

手ブレ防止および反復防止の提出ソリューションを選択する場合は、特定のビジネス ニーズに基づいて評価する必要があります。次の点を参考にしてください。

  1. 手ぶれ補正技術は、ボタンの連続クリックやイベントのスクロールなど、ユーザーが同じイベントを頻繁にトリガーする状況に適しています。クライアント側の対話型操作に適しており、不要なリクエストを削減できます。
  2. 反復送信防止テクノロジーは、ユーザーが同じフォームやリクエストを複数回送信することを防ぐ必要がある状況に適しています。サーバー側のフォーム送信、データ処理、その他のシナリオに適しています。
  3. 機密保持などの機密性の高い操作が含まれる場合は、セキュリティを向上させるために手ぶれ防止技術と再送信防止技術を同時に使用することをお勧めします。

つまり、手ぶれ防止であろうと、重複送信防止であろうと、適切なソリューションの選択は、特定のビジネス ニーズに応じて判断する必要があります。上記のサンプルコードは参考として使用でき、開発者は実際の状況に応じて適切な修正や最適化を行うことができます。

以上がPHP 手ぶれ防止および重複送信防止テクノロジー: 適切なソリューションを選択する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。