惡意刷新就是不停的去刷新提交頁(yè)面,導(dǎo)致大量無(wú)效數(shù)據(jù)了,下面我們來(lái)總結(jié)一下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>
新聞熱點(diǎn)
疑難解答