PHP で手ぶれ補正機能を実装して、繰り返しの送信を回避する方法
手ぶれ補正機能とは、ユーザーがイベントを継続的にトリガーすると、イベント処理が行われることを意味します。関数は 1 回だけ実行され、最後のトリガー後の一定期間は再度実行されません。実際の開発では、ユーザーが何度もフォームを送信してしまうケースがよくありますが、手ぶれ補正機能を使用すると、このような事態を効果的に回避できます。
PHP で手ぶれ補正機能を実装するにはさまざまな方法がありますが、ここでは一般的な実装方法と具体的なコード例を紹介します。
// 开启 Session session_start(); // 获取当前时间戳 $currentTimestamp = time(); // 获取上一次提交的时间戳 $lastTimestamp = $_SESSION['lastTimestamp'] ?? 0; // 判断时间间隔是否小于指定的防抖时间(例如5秒) if ($currentTimestamp - $lastTimestamp < 5) { echo '请勿重复提交'; exit; } // 更新上一次提交的时间戳 $_SESSION['lastTimestamp'] = $currentTimestamp;
この例では、Session を使用して最後のコミットのタイムスタンプを記録します。現在のタイムスタンプと最後の送信のタイムスタンプを比較することにより、時間間隔が指定された手ぶれ防止時間 (たとえば、5 秒) より短いかどうかを判断します。時間間隔が手ぶれ補正時間未満の場合は、繰り返し送信とみなされ、プロンプト情報が直接出力され、スクリプトの実行が終了します。
セッションを使用できるようにするには、スクリプトの先頭で session_start()
関数を呼び出してセッションを開く必要があることに注意してください。
繰り返しの送信を防ぐためによく使用されるもう 1 つの方法は、トークンを使用することです。フォームが送信されるたびに、一意のトークンが生成され、セッションまたはフォームの非表示フィールドに保存されます。バックグラウンドでフォーム送信を処理する場合、最初にトークンが有効かどうかを確認し、有効であれば処理を続行します。そうでない場合は、プロンプト メッセージが出力されます。
以下は、トークンを使用して繰り返しの送信を防ぐサンプル コードです:
// 开启 Session session_start(); // 生成一个唯一的 Token $token = md5(uniqid(rand(), true)); // 将 Token 保存在 Session 中 $_SESSION['token'] = $token; // 在表单中输出隐藏域,将 Token 传递给后台 echo '<input type="hidden" name="token" value="' . $token . '">'; // 处理表单提交 if ($_POST['token'] !== $_SESSION['token']) { echo '请勿重复提交'; exit; } // 继续处理表单数据 // ...
この例では、フォームが送信されるたびに一意のトークンを生成し、そのトークンをセッションの途中に保存します。 。フロントエンド フォームの非表示フィールドを介してトークンをバックエンドに渡します。フォーム送信をバックグラウンドで処理する場合、まずフォームから取得したトークンとセッションに保存したトークンが等しいかどうかを検証し、等しくない場合は繰り返し送信とみなし、プロンプト情報を直接出力し、スクリプトの実行は終了します。
要約すると、セッションまたはトークンを使用することで、PHP に手ぶれ補正機能を実装して、繰り返しの送信を回避できます。特定のニーズとシナリオに応じて、適切な実装方法を選択してください。上記は一般的に使用される 2 つの実装方法であり、参考のために具体的なコード例が示されています。お役に立てれば幸いです。
以上が繰り返しの送信を避けるために PHP に手ぶれ補正機能を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。