ホームページ > バックエンド開発 > PHPチュートリアル > PHP で複数のフォーム送信を防ぐには?

PHP で複数のフォーム送信を防ぐには?

Susan Sarandon
リリース: 2024-11-10 06:43:02
オリジナル
545 人が閲覧しました

How to Prevent Multiple Form Submissions in PHP?

複数回のクリックによる PHP での複数のフォーム送信への対処

フォームの送信が意図せず連続して複数回トリガーされる場合があり、望ましくない動作やデータの不整合が発生することがあります。この状況は、ボタンの複数回のクリックやフォームの処理の遅さなど、さまざまな要因によって発生する可能性があります。 PHP は、このような複数の送信を防止し、データの整合性を確保する技術を提供します。

複数のフォーム送信の防止

複数の送信に対処するために、広く使用されているアプローチには、フォームが表示されるたびに生成されるトークンを利用することが含まれます。このトークンはフォームとともに送信され、サーバー側で検証されます。このアプローチの極めて重要な利点は、CSRF (クロスサイト リクエスト フォージェリ) 攻撃とリプレイ攻撃の両方を軽減できる可能性があることです。

実践的な例

以下の例は、独自の各フォームのトークンと、フォーム送信時の検証が表示されます。

<?php
session_start();

/**
 * Generates a unique token for the form
 * @return string The token
 */
function getToken(){
  $token = sha1(mt_rand());
  if(!isset($_SESSION['tokens'])){
    $_SESSION['tokens'] = array($token => 1);
  }
  else{
    $_SESSION['tokens'][$token] = 1;
  }
  return $token;
}

/**
 * Validates the token and removes it from the list of valid tokens
 * @param string $token The token
 * @return bool Validation status
 */
function isTokenValid($token){
  if(!empty($_SESSION['tokens'][$token])){
    unset($_SESSION['tokens'][$token]);
    return true;
  }
  return false;
}

// Check if a form has been submitted
$postedToken = filter_input(INPUT_POST, 'token');
if(!empty($postedToken)){
  if(isTokenValid($postedToken)){
    // Process form
  }
  else{
    // Handle error
  }
}

// Get a token for the currently displayed form
$token = getToken();
?>
<form method="post">
  <fieldset>
    <input type="hidden" name="token" value="<?php echo $token; ?>"/>
    <!-- Form content -->
  </fieldset>
</form>
ログイン後にコピー

によるユーザー エクスペリエンスの向上リダイレクト

トークンベースのアプローチとリダイレクトを組み合わせると、適切な前後方向のナビゲーション動作が確保され、ユーザー エクスペリエンスが向上します。 POST / リダイレクト / GET デザイン パターンを実装することで、ユーザーが戻るボタンをクリックするかページを更新するときに誤って再送信されることを防ぐことができます。

以上がPHP で複数のフォーム送信を防ぐには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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