php中防止惡意刷新頁(yè)面的代碼小結(jié)
防止惡意刷頁(yè)面的原理是
要求在頁(yè)面間傳遞一個(gè)驗(yàn)證字符串,
在生成頁(yè)面的時(shí)候 隨機(jī)產(chǎn)生一個(gè)字符串,
做為一個(gè)必須參數(shù)在所有連接中傳遞。同時(shí)將這個(gè)字符串保存在session中。
點(diǎn)連接或者表單進(jìn)入頁(yè)面后,判斷session中的驗(yàn)證碼是不是與用戶(hù)提交的相同,如果相同,則處理,不相同則認(rèn)為是重復(fù)刷新。
在處理完成后將重新生成一個(gè)驗(yàn)證碼,用于新頁(yè)面的生成
代碼
<?php
session_start();
$k=$_GET['k'];
$t=$_GET['t'];
$allowTime = 1800;//防刷新時(shí)間
$ip = get_client_ip();
$allowT = md5($ip.$k.$t);
if(!isset($_SESSION[$allowT]))
{
$refresh = true;
$_SESSION[$allowT] = time();
}elseif(time() - $_SESSION[$allowT]>$allowTime){
$refresh = true;
$_SESSION[$allowT] = time();
}else{
$refresh = false;
}
?>
ie6提交兩次我也碰到過(guò),大致是用圖片代替submit時(shí),圖片上有個(gè)submit(),這樣會(huì)提交兩次,如果只是submit鈕我沒(méi)碰到過(guò)提交兩次的情況。
現(xiàn)在整理一下:
方法基本上前面幾位說(shuō)得差不多
接收的頁(yè)即2.php分為兩部分,一部分處理提交過(guò)來(lái)的變量,一部分顯示頁(yè)面
處理變量完畢用header( "location: ".$_SERVER[ 'PHP_SELF '])跳轉(zhuǎn)到自身頁(yè)
本部分要做判斷,如果沒(méi)有post的變量就跳過(guò)。當(dāng)然也可以跳到別的頁(yè)面。
跳到別的頁(yè)面返回時(shí)會(huì)有問(wèn)題,建議做在一個(gè)php文件里。
如果上頁(yè)穿過(guò)來(lái)得變量不符合要求可以強(qiáng)制返回
<script>
history.go(-1);
</script>
只說(shuō)了一下大體思路,也許高手們不會(huì)遇到此類(lèi)問(wèn)題,可是并不是每個(gè)人都是高手。
2.php的流程
if(isset($_POST))
{ 接收變量
if(變量不符合要求)
<script> history.go(-1); </script>
else
操作數(shù)據(jù)
...
if(操作完成)
header( "location: ".$_SERVER[ 'PHP_SELF ']);
}
<script language= "JavaScript ">
<!--
javascript:window.history.forward(1);
//-->
</script>
相關(guān)文章
PHP+MySQL實(shí)現(xiàn)輸入頁(yè)碼跳轉(zhuǎn)到指定頁(yè)面功能示例
這篇文章主要介紹了PHP+MySQL實(shí)現(xiàn)輸入頁(yè)碼跳轉(zhuǎn)到指定頁(yè)面功能,結(jié)合實(shí)例形式分析了php連接mysql數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)查詢(xún)及分頁(yè)顯示、指定頁(yè)數(shù)跳轉(zhuǎn)顯示等相關(guān)操作技巧,需要的朋友可以參考下2018-06-06PHP 實(shí)現(xiàn)explort() 功能的詳解
本篇文章是對(duì)PHP 實(shí)現(xiàn)explort()功能進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06PHP學(xué)習(xí)筆記(三):數(shù)據(jù)類(lèi)型轉(zhuǎn)換與常量介紹
這篇文章主要介紹了PHP學(xué)習(xí)筆記(三):數(shù)據(jù)類(lèi)型轉(zhuǎn)換與常量介紹,本文講解了PHP數(shù)據(jù)類(lèi)型相互轉(zhuǎn)換、常量的聲明與使用等內(nèi)容,需要的朋友可以參考下2015-04-04php實(shí)現(xiàn)改變圖片直接打開(kāi)為下載的方法
這篇文章主要介紹了php實(shí)現(xiàn)改變圖片直接打開(kāi)為下載的方法,涉及php操作圖片下載的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04PHP基于GD2函數(shù)庫(kù)實(shí)現(xiàn)驗(yàn)證碼功能示例
這篇文章主要介紹了PHP基于GD2函數(shù)庫(kù)實(shí)現(xiàn)驗(yàn)證碼功能,簡(jiǎn)單介紹了GD2函數(shù)庫(kù)的常用函數(shù),并結(jié)合實(shí)例形式分析了php實(shí)現(xiàn)驗(yàn)證碼功能相關(guān)操作技巧,需要的朋友可以參考下2019-01-01無(wú)需重新編譯php加入ftp擴(kuò)展的解決方法
本文為大家介紹無(wú)需重新編譯php加入ftp擴(kuò)展的方法,有需要的朋友可以參考下2013-02-02php中debug_backtrace、debug_print_backtrace和匿名函數(shù)用法實(shí)例
這篇文章主要介紹了php中debug_backtrace、debug_print_backtrace和匿名函數(shù)用法,以實(shí)例形式分析了debug_backtrace和debug_print_backtrace函數(shù)在調(diào)試過(guò)程中的作用,并分析了PHP5.3新增匿名函數(shù)的用法,需要的朋友可以參考下2014-12-12