Heim  >  Artikel  >  Backend-Entwicklung  >  So verhindern Sie die Seitenaktualisierung in PHP

So verhindern Sie die Seitenaktualisierung in PHP

墨辰丷
墨辰丷Original
2018-06-05 16:17:412752Durchsuche

In diesem Artikel wird hauptsächlich beschrieben, wie Sie wiederholte Seitenaktualisierungen in PHP verhindern können. Ich hoffe, dass er für alle hilfreich ist.

Wie Sie verhindern können, dass die Seite wiederholt aktualisiert wird, lässt sich leicht durch die Verwendung einer Sitzung in der PHP-Umgebung erreichen.

Der Code von 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;);} 
?>

Der Code ist nichts weiter als die Verschlüsselung der IP und der an die Seite übermittelten Daten, die per POST aktualisiert werden müssen Schreiben Sie es über die MD5-Verschlüsselung in die Sitzung und verwenden Sie es dann über die gespeicherte Sitzung, um das Aktualisierungsintervall zu bestimmen und festzustellen, ob eine Aktualisierung zulässig ist. Es ist zu beachten, dass sich die beiden Parameter „$fs1=$_POST['a'];“ auf die Parameter beziehen, die andere Seiten an die Seite übermitteln müssen durch die Post-Methode aktualisiert. Der Grund, warum diese Parameter zusätzlich zur IP hinzugefügt werden, besteht darin, unterschiedliche Post-Ergebnisse zu unterscheiden. (Tatsächlich soll die sogenannte Anti-Refresh verhindern, dass eine bestimmte Seite wiederholt übermittelt wird.)

Genauer gesagt, wenn der obige Code beispielsweise am Anfang der b.php-Seite platziert wird , wir haben auf der a.html-Seite Folgendes:

Code:

<!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>

Sie können sehen, dass die beiden auf dieser Seite übermittelten Parameter a und b genau die beiden Parameter in b sind. php (eigentlich sollte es umgekehrt sein, durch die Parameter der Übermittlungsseite bestimmt). Im vorherigen PHP-Code wurde festgelegt, dass auf die Seite, auf der die Daten übermittelt werden, nur per Post zugegriffen werden kann. Daher wird bei direkter Eingabe der Adresse eine 404-Header-Fehlerseite angezeigt. Die Seite kann nur per Post abgerufen werden Wenn der Beitrag aktualisiert wird, wird er mit einem eigenen Parameter versehen. Dadurch wird erreicht, dass die Aktualisierung jeder IP auf derselben Seite verhindert wird.

Darüber hinaus können wir einen Referrer hinzufügen, um die Quellwebsite auf der Seite zu bestimmen, die gepostet wird, um eine Cross-Site-Übermittlung zu verhindern. Der Referrer kann jedoch gefälscht werden, und Firefox und IE8 verlieren den Referrer oft aus unerklärlichen Gründen Wir werden diesen Code vorerst nicht hinzufügen.

Zusammenfassung : Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, dass er für das Studium aller hilfreich sein wird.

Verwandte Empfehlungen:

PHP implementiert eine Methode zum Erzwingen des angegebenen Rückruftyps basierend auf Callable

PHP-Methode zum Lösen und Vermeiden der wiederholten Übermittlung von Formularformularen

Beispielfreigabe für eine einfache PHP-String-Filtermethode

Das obige ist der detaillierte Inhalt vonSo verhindern Sie die Seitenaktualisierung in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn