国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

php采用session實現防止頁面重復刷新

2024-05-04 23:41:21
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了php采用session實現防止頁面重復刷新的代碼及使用方法,需要的朋友可以參考下
 

如何防止頁面重復刷新,在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丟失的情況,所以暫時也就不加這個代碼。



注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 北安市| 钦州市| 独山县| 乃东县| 定兴县| 成都市| 咸阳市| 九台市| 澄江县| 谢通门县| 建阳市| 尖扎县| 临泽县| 固安县| 修水县| 武乡县| 汉阴县| 茌平县| 隆尧县| 万山特区| 尤溪县| 丘北县| 绍兴市| 得荣县| 资阳市| 达州市| 霍林郭勒市| 内江市| 崇信县| 隆昌县| 云浮市| 婺源县| 北票市| 阿克| 石阡县| 普陀区| 隆回县| 青冈县| 若羌县| 平顶山市| 巴楚县|