ホームページ  >  記事  >  バックエンド開発  >  PHPでページの更新を防ぐ方法

PHPでページの更新を防ぐ方法

墨辰丷
墨辰丷オリジナル
2018-06-05 16:17:412771ブラウズ

この記事では主に PHP でページの更新を防ぐ方法を紹介します。興味のある方はぜひ参考にしてください。

ページが繰り返し更新されないようにする方法は、PHP環境でセッションを使用することで簡単に実現できます。

b.php

<?php

//只能通过post方式访问 
if ($_SERVER[&#39;REQUEST_METHOD&#39;] == &#39;GET&#39;) 
{header(&#39;HTTP/1.1 404 Not Found&#39;); die(&#39;亲,页面不存在&#39;);} 
session_start(); 
$fs1=$_POST[&#39;a&#39;]; 
$fs2=$_POST[&#39;b&#39;]; 
//防刷新时间,单位为秒 
$allowTime = 30; 
//读取访客ip,以便于针对ip限制刷新 
/*获取真实ip开始*/ 
if ( ! function_exists(&#39;GetIP&#39;)) 
{ 
function GetIP() 
{ 
static $ip = NULL; 
if ($ip !== NULL) 
{ 
return $ip; 
} 
if (isset($_SERVER)) 
{ 
if (isset($_SERVER[&#39;HTTP_X_FORWARDED_FOR&#39;])) 
{ 
$arr = explode(&#39;,&#39;, $_SERVER[&#39;HTTP_X_FORWARDED_FOR&#39;]); 
/* 取X-Forwarded-For中第x个非unknown的有效IP字符? */ 
foreach ($arr as $xip) 
{ 
$xip = trim($xip); 
if ($xip != &#39;unknown&#39;) 
{ 
$ip = $xip; 
break; 
} 
} 
} 
elseif (isset($_SERVER[&#39;HTTP_CLIENT_IP&#39;])) 
{ 
$ip = $_SERVER[&#39;HTTP_CLIENT_IP&#39;]; 
} 
else 
{ 
if (isset($_SERVER[&#39;REMOTE_ADDR&#39;])) 
{ 
$ip = $_SERVER[&#39;REMOTE_ADDR&#39;]; 
} 
else 
{ 
$ip = &#39;0.0.0.0&#39;; 
} 
} 
} 
else 
{ 
if (getenv(&#39;HTTP_X_FORWARDED_FOR&#39;)) 
{ 
$ip = getenv(&#39;HTTP_X_FORWARDED_FOR&#39;); 
} 
elseif (getenv(&#39;HTTP_CLIENT_IP&#39;)) 
{ 
$ip = getenv(&#39;HTTP_CLIENT_IP&#39;); 
} 
else 
{ 
$ip = getenv(&#39;REMOTE_ADDR&#39;); 
} 
} 
preg_match("/[\d\.]{7,15}/", $ip, $onlineip); 
$ip = ! empty($onlineip[0]) ? $onlineip[0] : &#39;0.0.0.0&#39;; 
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(&#39;HTTP/1.1 404 Not Found&#39;); die(&#39;来自&#39;.$ip.&#39;的亲,您刷新过快了&#39;);} 
?>

のコードは非常にシンプルで、更新する必要があるページに送信された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でページの更新を防ぐ方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。