Maison  >  Article  >  développement back-end  >  Comment empêcher l'actualisation de la page en php

Comment empêcher l'actualisation de la page en php

墨辰丷
墨辰丷original
2018-06-05 16:17:412716parcourir

Cet article explique principalement comment empêcher les actualisations de page répétées en PHP. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Comment empêcher la page d'être actualisée à plusieurs reprises peut être facilement réalisé en utilisant une session dans l'environnement PHP.

Le code de 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;);} 
?>

Le code est très simple. Il ne s'agit que de crypter l'adresse IP et les données soumises à la page qui doivent être actualisées via POST et. l'écrire dans la session après le cryptage md5. Utilisez ensuite la session stockée pour juger de l'intervalle de temps d'actualisation afin de décider d'autoriser ou non l'actualisation. Il convient de noter que les deux paramètres "$fs1=$_POST['a'];" et "$fs1=$_POST['a'];" font référence aux paramètres que d'autres pages soumettent à la page qui doit être rafraîchi via la méthode post. La raison pour laquelle ces paramètres sont ajoutés en plus de l'IP est de distinguer les différents résultats de publication. (En fait, ce qu'on appelle l'anti-rafraîchissement consiste à empêcher qu'une certaine page soit soumise à plusieurs reprises.)

Plus précisément, par exemple, si le code ci-dessus est placé au début de la page b.php , nous avons ce qui suit sur la page a.html Formulaire :

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>

Vous pouvez voir que les deux paramètres a et b soumis sur cette page sont exactement les deux paramètres dans b.php (en fait, cela devrait être l'inverse), déterminé par les paramètres de la page de soumission). Dans le code PHP précédent, il a été déterminé que la page sur laquelle les données sont soumises n'est accessible que par courrier, donc la saisie directe de l'adresse obtiendra une page d'erreur d'en-tête 404. La page ne peut être obtenue que par courrier. À ce moment-là, lorsque la publication est actualisée, elle apportera la sienne. Sur l'adresse du paramètre, cela a pour effet d'empêcher l'actualisation de chaque IP sur la même page.

De plus, nous pouvons ajouter un référent pour déterminer le site Web source sur la page en cours de publication afin d'empêcher la soumission entre sites. Cependant, le référent peut être falsifié, et Firefox et IE8 perdent souvent le référent de manière inexplicable. nous n'ajouterons pas cela pour le moment.

Résumé  : Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'étude de chacun.

Recommandations associées :

PHP implémente une méthode pour forcer le type de rappel spécifié basé sur Callable

Méthode PHP pour résoudre et éviter la soumission répétée de formulaires

Partage d'exemples de méthode de filtrage de chaînes simple PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn