一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - php環境下利用session防止頁面重復刷新的具體實現

php環境下利用session防止頁面重復刷新的具體實現

2020-06-04 13:43PHP教程網 PHP教程

如何防止頁面重復刷新,在php環境下可以利用session來輕松實現,下面是具體的代碼,需要的朋友可以參考下

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加密后寫入session中,再通過存儲的session來判斷刷新時間間隔從而決定是否允許刷新。需要說明的是"$fs1=$_POST['a'];"、"$fs1=$_POST['a'];"兩個參數是指其他頁面通過post方式提交到需要防刷新頁的參數。之所以除了ip之外還要加這些參數的原因是為了區別不同的post結果。(實際上所謂的防刷新也就是防止某一頁面被反復提交。)

更具體的說,比如上述代碼放在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>


可以看到這個頁面提交的a和b 2個參數正是前面b.php中的2個參數(實際上應該反過來說,由提交頁面的參數來決定)。在前面的php代碼中,已經確定只能通過post訪問被提交數據的頁面,所以直接輸入地址會得到一個404頭的錯誤頁面,只能通過post方式來得到頁面,同時post刷新的時候會自己帶上參數地址,這樣就實現了同一頁面每個ip的防止刷新效果。

另外我們可以在被post的頁面增加通過referer判定來源網站,防止跨站提交,不過referer可以偽造,而且firefox和ie8經常莫名其妙出現referer丟失的情況,所以暫時也就不加這個代碼。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美最猛性xxxxx动态图 | 无码一区国产欧美在线资源 | 免费一级特黄特色大片 | 黑人破中国女人处 | 精品网站一区二区三区网站 | 精品久久国产 | brazzersvideo欧美最新 | 欧洲第一区第二区第三区 | 金莲一级淫片aaaaaa | 国内精品视频免费观看 | 荡娃艳妇系列小说 | 506rr亚洲欧美 | 欧美日韩视频一区三区二区 | 欧美同性videos| 特黄a大片免费视频 | h黑寡妇一级毛片 | 免费观看一级一片 | 免费在线观看日韩 | 狠狠色狠狠色综合婷婷tag | 精品免费视频 | 精品一区二区三区自拍图片区 | 欧美伊人久久久久久久久影院 | 日本免费一区二区三区 | 99r视频 | 日韩国产成人 | videos护士有奶水 | 亚洲精品老司机福利在线播放 | 2021国产精品露脸在线 | 久久精品国产在热亚洲 | 波多野结衣 在线播放 | 我强进了老师身体在线观看 | 1024免费观看完整版在线播放 | 日韩亚洲人成在线综合 | 99影视在线视频免费观看 | 国产成人综合亚洲亚洲欧美 | 国产xx肥老妇视频奂费 | 国产亚洲精品一区二区在线观看 | 惩罚狠h调教灌满 | 国产福利兔女郎在线观看 | 红杏劫| 特级老女人淫片高清视频 |