ホームページ  >  記事  >  バックエンド開発  >  手ぶれ防止と重複送信防止: PHP 開発の必須スキル

手ぶれ防止と重複送信防止: PHP 開発の必須スキル

王林
王林オリジナル
2023-10-12 09:24:24522ブラウズ

防抖和防重复提交:PHP 开发中的必备技巧

手ぶれ防止と重複投稿防止: PHP 開発の必須スキル

インターネットの発展に伴い、Web アプリケーションは人々の生活に欠かせないものになりました。 PHP 開発では、揺れ防止と反復送信防止は非常に重要なスキルの 1 つです。この記事では、手ぶれ防止と重複送信防止の概念と原則を紹介し、具体的なコード例を示します。

1. アンチシェイクの概念と原理
アンチシェイクは、頻繁にトリガーされるイベントの実行数を減らすために使用される一般的な技術手段です。簡単に言えば、手ぶれ補正の機能は、以前のトリガー イベントを無視し、一定時間内に最後にトリガーされたイベントのみを実行することです。

手ぶれ補正の原理は、タイマーを使用してイベントの実行機能を遅らせることです。イベントがトリガーされると、タイマーが設定されます。タイマーの時間範囲内で、イベントが再度トリガーされると、時間が再調整されます。タイマーの期限が切れた後にイベントが再度トリガーされない場合は、最後にトリガーされた時間が記録されます。イベントが実行されます。

次は、手ぶれ補正機能を実装する簡単な PHP コードの例です。

function debounce($callback, $delay) {
    $timer = null;
    return function () use ($callback, $delay, &$timer) {
        if ($timer) {
            clearTimeout($timer);
        }
        $args = func_get_args();
        $timer = setTimeout(function () use ($callback, $args) {
            call_user_func_array($callback, $args);
        }, $delay);
    };
}

使用例:

function search($keyword) {
    // 模拟搜索操作
    echo "搜索关键词:$keyword
";
}

$debounceSearch = debounce('search', 1000); // 设置延迟为 1 秒

$debounceSearch('PHP'); // 触发搜索关键词:PHP
$debounceSearch('JavaScript'); // 不触发
$debounceSearch('Python'); // 不触发

上記の例では、デバウンス関数は次のように生成されます。 debounceSearch 関数を呼び出すと、遅延時間が 1 秒に設定されます。 debounceSearch 関数が呼び出されるたびに、1 秒以内に新しい呼び出しがある場合は時間がリセットされ、1 秒以内に新しい呼び出しがない場合は最後の呼び出しが実行されます。

2. 重複送信防止の概念と原則
重複送信防止とは、ユーザーがフォーム送信などの操作中に同じリクエストを複数回送信できないようにすることを指します。繰り返し送信すると、バックエンド データに異常が発生し、システムに不必要な負荷がかかる場合があります。

繰り返しの送信を防ぐ原則は、送信する前にリクエストごとに一意の識別子を生成することです。リクエストを受信した後、バックエンドは識別子が使用されているかどうかを確認し、使用されている場合は重複送信とみなされ処理を拒否し、使用されていない場合はリクエストの処理を続行し、マークを付けます。使用される識別子。

以下は、重複送信を防止する機能を実装する簡単な PHP コードの例です。

function preventDuplicateSubmit() {
    $token = md5(uniqid(rand(), true));
    $_SESSION['token'] = $token;
    return $token;
}

function checkDuplicateSubmit() {
    $token = isset($_SESSION['token']) ? $_SESSION['token'] : '';
    unset($_SESSION['token']);
    return !empty($token) && $token === $_POST['token'];
}

// 处理表单提交请求
function handleFormSubmit() {
    if (checkDuplicateSubmit()) {
        echo "请勿重复提交表单";
        return;
    }
    // 处理正常请求
    echo "表单提交成功";
}

// 生成表单
function generateForm() {
    $token = preventDuplicateSubmit();
    echo <<<HTML
    <form method="post" action="submit.php">
        <input type="hidden" name="token" value="$token">
        <!-- 表单其他字段 -->
        <button type="submit">提交</button>
    </form>
    HTML;
}

// 页面中显示表单并处理提交
generateForm();
handleFormSubmit();

上の例では、一意の識別子が、preventDuplicateSubmit 関数を通じて生成され、セッションに保存されます。フォームが送信されると、識別子が非表示フィールド (トークン) としてリクエストに追加され、リクエストされたトークンがセッションに保存されたトークンと一致するかどうかがチェックされます。

上記の揺れ防止および再送信防止技術により、Web アプリケーションのユーザー エクスペリエンスとセキュリティを向上させることができます。実際の開発では、特定のニーズやビジネス シナリオに応じて、実際のニーズに合わせてさまざまなシナリオに適切な調整や拡張を行うことができます。

具体的なコード例が上に示されていますが、コードの安定性とセキュリティを確保するために、ドキュメントを注意深く読み、使用前にテストすることをお勧めします。

以上が手ぶれ防止と重複送信防止: PHP 開発の必須スキルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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