ホームページ >バックエンド開発 >PHPチュートリアル >PHPでページの更新を防ぐ方法
この記事では主に PHP でページの更新を防ぐ方法を紹介します。興味のある方はぜひ参考にしてください。
ページが繰り返し更新されないようにする方法は、PHP環境でセッションを使用することで簡単に実現できます。
b.php
<?php //只能通过post方式访问 if ($_SERVER['REQUEST_METHOD'] == 'GET') {header('HTTP/1.1 404 Not Found'); die('亲,页面不存在');} session_start(); $fs1=$_POST['a']; $fs2=$_POST['b']; //防刷新时间,单位为秒 $allowTime = 30; //读取访客ip,以便于针对ip限制刷新 /*获取真实ip开始*/ if ( ! function_exists('GetIP')) { function GetIP() { static $ip = NULL; if ($ip !== NULL) { return $ip; } if (isset($_SERVER)) { if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); /* 取X-Forwarded-For中第x个非unknown的有效IP字符? */ foreach ($arr as $xip) { $xip = trim($xip); if ($xip != 'unknown') { $ip = $xip; break; } } } elseif (isset($_SERVER['HTTP_CLIENT_IP'])) { $ip = $_SERVER['HTTP_CLIENT_IP']; } else { if (isset($_SERVER['REMOTE_ADDR'])) { $ip = $_SERVER['REMOTE_ADDR']; } else { $ip = '0.0.0.0'; } } } else { if (getenv('HTTP_X_FORWARDED_FOR')) { $ip = getenv('HTTP_X_FORWARDED_FOR'); } elseif (getenv('HTTP_CLIENT_IP')) { $ip = getenv('HTTP_CLIENT_IP'); } else { $ip = getenv('REMOTE_ADDR'); } } preg_match("/[\d\.]{7,15}/", $ip, $onlineip); $ip = ! empty($onlineip[0]) ? $onlineip[0] : '0.0.0.0'; return $ip; } } /*获取真实ip结束*/ $reip = GetIP(); //相关参数md5加密 $allowT = md5($reip.$fs1.$fs2); if(!isset($_SESSION[$allowT])){ $_SESSION[$allowT] = time(); } else if(time() - $_SESSION[$allowT]-->$allowTime){ $_SESSION[$allowT] = time(); } //如果刷新过快,则直接给出404header头以及提示 else {header('HTTP/1.1 404 Not Found'); die('来自'.$ip.'的亲,您刷新过快了');} ?>
のコードは非常にシンプルで、更新する必要があるページに送信されたIPとデータをPOSTで暗号化し、MD5暗号化後にセッションに書き込むだけです。保存されたセッションを通じてリフレッシュ時間間隔を判断し、リフレッシュを許可するかどうかを決定します。 2 つのパラメータ「$fs1=$_POST['a'];」と「$fs1=$_POST['a'];」は、他のページが必要とするページに送信するパラメータを参照していることに注意してください。 post メソッドを通じて更新されます。 IP に加えてこれらのパラメータが追加される理由は、さまざまな投稿結果を区別するためです。 (実際、いわゆるアンチリフレッシュは、特定のページが繰り返し送信されるのを防ぐことです。)
より具体的には、たとえば、上記のコードが b.php ページの先頭に配置されている場合、 a.html ページの次のフォーム:
コード:
<!DOCTYPE> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>b.html</title> </head> <body> <form action="b.php" method="post" > <input type="hidden" id="a" name="a" value="a"/> <input type="hidden" id="b" name="b" value="b"/> <button name="" type="submit" >提交</button> </form> </body> </html>
このページによって送信された 2 つのパラメーター a と b が、b.php の 2 つのパラメーターとまったく同じであることがわかります (実際には逆である必要があります。送信されたページのパラメータによって異なります)。以前の PHP コードでは、データが送信されるページは post 経由でのみアクセスできると判断されているため、アドレスを直接入力すると 404 ヘッダー エラーが発生します。ページは post 経由でのみ取得できます。投稿が更新されると、パラメータ アドレスに独自のアドレスが表示されます。これにより、同じページ上の各 IP の更新を防ぐ効果が得られます。
さらに、クロスサイト送信を防ぐために、投稿されているページにリファラーを追加してソース Web サイトを決定することもできますが、リファラーは偽造される可能性があり、Firefox と IE8 ではリファラーが不可解に失われることがよくあるため、追加しません。とりあえずこのコード。
概要: 上記がこの記事の全内容です。皆様の学習に役立つことを願っています。
関連する推奨事項:
PHP は Callable に基づいて、指定されたコールバックタイプを強制するメソッドを実装します
php メソッドを使用してフォームフォームの繰り返し送信を解決し、回避します
以上がPHPでページの更新を防ぐ方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。