ホームページ > バックエンド開発 > PHPチュートリアル > PHP における手ぶれ防止および重複投稿のベスト プラクティス ガイドライン

PHP における手ぶれ防止および重複投稿のベスト プラクティス ガイドライン

WBOY
リリース: 2023-10-12 11:28:01
オリジナル
1046 人が閲覧しました

PHP 中防抖和防重复提交的最佳实践指南

PHP での手ぶれ防止および重複送信防止のためのベスト プラクティス ガイド

はじめに:
インターネットの継続的な発展に伴い、ユーザー インタラクションはさらに多様化しています。そしてもっと頻繁に。 Web アプリケーションでは、ユーザーはフォームを送信するときに、手振れ防止と繰り返し送信の防止という 2 つの一般的な問題に遭遇することがあります。この記事では、これら 2 つの問題を解決するための PHP のベスト プラクティスを紹介し、具体的なコード例を示します。

1. 手ぶれ補正の概念と原理:
ユーザーが一定期間内にボタンをクリックしたり、入力ボックスの内容を変更したりするなどのアクションを頻繁にトリガーする場合、不要なリクエストを削減し、ユーザーエクスペリエンスを向上させるために、動きに対して手ぶれ補正を実行できます。
手ぶれ補正の原理は、特定の遅延時間内にアクションが再度トリガーされると遅延時間が変更され、アクションが再度トリガーされない場合は対応する操作が実行されます。

2. アンチシェイクの実装方法:
以下はアンチシェイクを実装するための簡単な関数です:

function debounce(callable $callback, $delay) {
    $timer = null;
    
    return function() use ($callback, $delay, &$timer) {
        if ($timer) {
            clearTimeout($timer);
        }
        
        $timer = setTimeout(function() use ($callback) {
            call_user_func_array($callback, func_get_args());
        }, $delay);
    }
}
ログイン後にコピー

上記の関数は、コールバック関数と遅延時間をパラメータとして受け取ります。この関数が呼び出されると、新しい関数が返されます。新しい関数は、ユーザーがアクションをトリガーした後の遅延時間内にコールバック関数を実行しなくなりました。遅延時間に達した場合のみコールバック関数が実行されます。

3. 繰り返し送信を防止する概念と原則:
ユーザーが操作上で送信ボタンを複数回クリックした場合、最初の送信のみが有効であり、その後の繰り返し送信は有効であることを確認する必要があります。無視する必要があります。この要件を達成するために、トークン メカニズムとリダイレクトを使用できます。

トークン メカニズムの原理は、フォーム内で一意のトークンを生成し、そのトークンをセッションに保存することです。ユーザーがフォームを送信すると、サーバーはトークンの有効性を検証する必要があります。トークンが無効な場合は、送信が重複した送信であるため、無視する必要があることを意味します。

4. 繰り返し送信を防ぐ方法:
以下は、トークン メカニズムとリダイレクトに基づいて繰り返し送信を防ぐコード例です:

function generateToken() {
    $token = sha1(uniqid(rand(), true)); // 生成一个唯一的Token
    $_SESSION['token'] = $token; // 将Token存储于Session中
    
    return $token;
}

function isValidToken($token) {
    if (empty($_SESSION['token']) || $_SESSION['token'] !== $token) {
        return false; // Token无效
    }
    
    unset($_SESSION['token']);
    return true; // Token有效
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $token = isset($_GET['token']) ? $_GET['token'] : null;
    
    if (!isValidToken($token)) {
        header('Location: /'); // 重定向到首页或其他页面
        exit;
    }
    
    // 处理表单提交的逻辑
    // ...
}
ログイン後にコピー

フォームに、次のコードを追加する必要があります。生成されたトークンを保存する非表示のドメイン:

<form action="/submit" method="post">
    <input type="hidden" name="token" value="<?php echo generateToken(); ?>">
    <!-- 其他表单字段 -->
    <!-- 提交按钮 -->
</form>
ログイン後にコピー

上記のコードでは、最初にgenerateToken関数を通じて一意のトークンが生成され、そのトークンがセッションに保存されます。ユーザーがフォームを送信すると、サーバーは isValidToken 関数を通じてトークンの有効性を検証します。トークンが無効な場合、ユーザーはホームページまたは他のページにリダイレクトされ、その後の繰り返しの送信は無視されます。

結論:
手ぶれ防止と繰り返し送信の防止のベスト プラクティスを通じて、Web アプリケーションのパフォーマンスとユーザー エクスペリエンスを効果的に向上させることができます。実際のアプリケーションでは、特定のニーズに応じて、適切な手ぶれ補正および繰り返し送信ソリューションを選択できます。

以上がPHP における手ぶれ防止および重複投稿のベスト プラクティス ガイドラインの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート