ホームページ  >  記事  >  バックエンド開発  >  PHP はサンプル コードの更新と繰り返しの送信を防止します

PHP はサンプル コードの更新と繰り返しの送信を防止します

WBOY
WBOYオリジナル
2016-07-25 09:12:191184ブラウズ

PHP ページへの直接アクセスを禁止し、引用するだけです! このようにすると、B ページに直接アクセスできなくなります。 A に COOKIE を追加し、B が COOKIE を決定した後に COOKIE を削除することもできます。 モジュールのリフレッシュを防止する そこで、このような状況が起こらないようにパラメータを追加することを検討しました。COOKIE と SESSION は使用できますが、COOKIE はクライアント側で無効にしても、悪意を持ってクリック数を更新する可能性があります。 SESSION を使用する方がよいでしょう。IP+URL パラメータの MD5 値が、誰でも偽造するのは難しいと思います。 実装原則: Set max_reloadtime =100 //最大ページ更新間隔を設定します。 ユーザーが初めてページを開いたときに、現在の時間が記録され、session_start に保存されます。 ユーザーが 2 回目にページを開いたとき (session_start が存在するかどうかを判断するため)、session_start から現在時刻を減算して、差分 time_passed を取得します。 時間が経つと

例:

  1. session_start();
  2. $k = $_GET['k'];
  3. //アンチリフレッシュ時間
  4. $allowTime = 1800 ;
  5. $ip = get_client_ip();
  6. $allowT = md5($ip . $k . $t);
  7. $refresh = true; [ $allowT] = time(); elseif (time() - $_SESSION[$allowT] > $allowTime) {
  8. $refresh = true
  9. $_SESSION[$allowT] = time(); {
  10. $refresh = false
  11. }
  12. ?>
  13. コードをコピー
  14. 例 2、PHP は重複送信を防ぎます。 まず、セッション変数を定義して、フォームの送信シーケンス番号を保存できます。 これは「$userLastAction」として定義されます。
次に、フォームに隠し変数を追加し、値を $userLastAction+1 に設定します。 > 最後に、送信を処理する前にフォームが送信されたかどうかを確認します。

if($lastAction>$userLastAction and inputIsValid(…)){

$userLastAction++; // シーケンス番号に 1 を加算します
// フォームデータを処理します
}
  1. コードをコピーします
  2. :
$_SESSION['code']=mt_rand(1,1000);//1 から 1000 までの乱数を生成します

"hidden" name="scode" value="
    コードをコピーします。

    提出されたページ:

    1. if($_SESSION['code']!=$_REQUEST['scode']){

    2. echo "再送信しないでください"
    3. }
    4. $_SESSION[' code']=0

    5. /* 改良版

    6. PHP では、ユーザーがページを更新 (更新または再読み込み) したり、フォームのコンテンツを繰り返し送信したりすることができなくなります。
    7. フォーム変数の内容は $_POST['name'] によって参照されるため、おそらくフォームを処理した後、$_POST['name'] を直接破棄することができます (unset())。実際には違います。ページがデフォルトでフォームのコンテンツをキャッシュしている可能性があります。そのため、$_POST['name'] が破棄された場合でも、$_POST['name'] には更新後に値が割り当てられ、依然として有効です。
    8. セッションを使用して解決できます。まず、セッションに 400 などの値を割り当てます。最初の送信が成功した後、2 回目の送信時にセッションの値を変更します。セッションの値が 400 でない場合は、セッション内のデータを確認します。フォームは処理されなくなります。
    9. セッションの有効期限は設定できますか?
    10. */
    11. if (isset($_POST['action']) && $_POST['action'] == 'submitted') {
    12. session_start(); または die ( "セッションなし");
    13. if ($_SESSION['num']==400){
    14. print '
      ' </li>
      <li> print '<a href="'; ['PHP_SELF'] .'">もう一度お試しください</a>'; </li>
      <li> print '
      ';
    15. $_SESSION['num']=500;
    16. } else {
    17. print ' <li> print_r($_POST); </li> <li> echo "ただし、送信しました"; </li> <li> print '';
    18. session_start() または die("セッションが開始されていません");
    19. $_SESSION['num']= 400;

    20. メール:
      ;br> <名前="ビール[]">
    21. type="submit" name="submit" value="送信してください!">
    22. ?>
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。