ホームページ  >  記事  >  バックエンド開発  >  PHP手ぶれ補正と重複投稿対策の実装方法の比較

PHP手ぶれ補正と重複投稿対策の実装方法の比較

WBOY
WBOYオリジナル
2023-10-12 10:36:251226ブラウズ

PHP 防抖和防重复提交的实现方式对比

PHP アンチシェイクとアンチデュプリケーションの実装方法の比較

Web アプリケーションを開発する場合、アンチシェイク (デバウンス) とアンチデュプリケーションが必要な状況によく遭遇します。フォームの重複送信の防止。アンチシェイクとは、ユーザーが頻繁にイベントをトリガーした場合に、最後にトリガーされたアクションのみを実行することを意味します。一方、アンチ反復送信とは、ユーザーが短期間に複数回フォームを送信するときに、次のことを保証する必要があることを意味します。 1 つの送信のみが処理されます。この記事では、PHP で手ぶれ防止と再送信防止を実現するいくつかの方法を比較して紹介することに重点を置き、具体的なコード例を示します。

  1. 手ぶれ補正の実装方法
    手ぶれ補正はタイマーを設定することで設定でき、最後のトリガーイベントの後、一定時間の遅延後に対応する動作が実行されます。以下は、PHP を使用して手ぶれ補正を実現するサンプル コードです。
function debounce($callback, $delay) {
    $timer = null;
    
    return function() use ($callback, $delay, &$timer) {
        if ($timer !== null) {
            clearTimeout($timer);
        }
        
        $timer = setTimeout($callback, $delay);
    };
}

// 使用防抖函数处理表单提交事件
$debouncedHandler = debounce(function() {
    // 处理表单提交逻辑
}, 1000);

// 绑定事件处理函数
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $debouncedHandler();
}
  1. 繰り返し送信を防ぐ方法
    フォームの繰り返し送信を防ぐには、次の方法があります。

2.1. トークン検証
トークン検証を使用すると、フォームリクエストごとに一意の識別子を生成し、その識別子をセッションに保存できます。ユーザーがフォームを送信すると、最初に識別子が存在するかどうか、およびそれがリクエスト内の識別子と一致するかどうかを確認して、それが繰り返し送信されたものであるかどうかを判断します。以下は、PHP を使用してトークン検証を実装するサンプル コードです:

session_start();

function generateToken() {
    return md5(uniqid(rand(), true));
}

function validateToken($token) {
    // 从 session 中获取 token
    $storedToken = $_SESSION['token'];

    return $storedToken && $token === $storedToken;
}

function removeToken() {
    // 从 session 中移除 token
    unset($_SESSION['token']);
}

// 生成 Token 并存储在 session 中
$_SESSION['token'] = generateToken();

// 处理表单提交逻辑
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $token = $_POST['token'];

    if (validateToken($token)) {
        // 执行表单提交操作
        // ...

        // 提交完成后移除 Token
        removeToken();
    } else {
        // Token 验证失败,可能是重复提交
        // 提示用户不要重复提交
    }
}

2.2. リダイレクト
リダイレクトを使用してフォーム送信後のページ ジャンプを処理すると、ユーザーがフォームを繰り返し送信するのを効果的に防ぐことができます。ユーザーがフォームを送信すると、最初に送信ロジックが処理され、次にヘッダー関数を使用してユーザーを新しいページにリダイレクトします。以下は、PHP を使用してリダイレクトを実装するサンプル コードです。 上記のコードの

// 处理表单提交逻辑
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // 执行表单提交操作
    // ...

    // 重定向到新页面
    header("Location: success.php");
    exit;
}

success.php は、ユーザーに送信成功を促すページです。更新ボタンを押すと、success.php ページのみが更新され、フォームは再度送信されません。

要約:
PHP の揺れ防止と重複送信防止の実装方法を比較することで、特定のニーズに応じてアプリケーションを保護するための適切な方法を選択できます。アンチシェイクは、ユーザーが頻繁にイベントをトリガーすることを避ける必要がある状況に適していますが、フォームの繰り返し送信を防止することは、ユーザーがフォームを複数回送信することを防ぐことです。トークン検証とリダイレクトの使用は、一般的で実行可能な 2 つの方法であり、開発者は実際の状況に基づいて、繰り返し送信を防ぐ適切な方法を選択できます。

以上がPHP手ぶれ補正と重複投稿対策の実装方法の比較の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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