日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

内网通修改积分文件_转盘抽奖分享得积分,你是如何防止页面被恶意刷新的

發(fā)布時間:2023/12/19 编程问答 64 豆豆
生活随笔 收集整理的這篇文章主要介紹了 内网通修改积分文件_转盘抽奖分享得积分,你是如何防止页面被恶意刷新的 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

惡意刷新

惡意刷新就是不停的去刷新提交頁面,導(dǎo)致出現(xiàn)大量無效數(shù)據(jù),這類問題在實際應(yīng)用中我們經(jīng)常遇到,比如一個活動的分享得積分,刷票,刷紅包等等,遇到這些問題,你是如何去防止的。

當(dāng)你在做一個刷紅包的活動,或者一個分享得積分的活動時,頻繁的被刷新會導(dǎo)致數(shù)據(jù)庫吃緊,嚴(yán)重時會導(dǎo)致系統(tǒng)死機(jī)。遇到這方面你是如何防止惡意刷新頁面的,說白了也就是惡意刷新你創(chuàng)建的鏈接。

下面我們來看看防止惡意刷頁面的原理:

1 要求在頁面間傳遞一個驗證字符串;
2 在生成頁面的時候 隨機(jī)產(chǎn)生一個字符串;
3 做為一個必須參數(shù)在所有連接中傳遞。同時將這個字符串保存在session中;
點連接或者表單進(jìn)入頁面后,判斷session中的驗證碼是不是與用戶提交的相同,如果相同,則處理,不相同則認(rèn)為是重復(fù)刷新;
4 在處理完成后將重新生成一個驗證碼,用于新頁面的生成。

我們可以從session方面防止用戶惡意刷新。

代碼如下:

方案一:

<?php session_start(); $k=$_GET['k']; $t=$_GET['t']; $allowTime = 1800;//防刷新時間 $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; } ?>

方案二:

<?php session_start(); $allow_sep = "2"; if (isset($_SESSION["post_sep"])) {   if (time() - $_SESSION["post_sep"] < $allow_sep) {    exit("請不要頻繁刷新,休息2秒再刷新吧");   }   else {    $_SESSION["post_sep"] = time();   } } else { $_SESSION["post_sep"] = time(); } ?>

方案三:

<?php session_start(); if(!empty($_POST[name])){ $data = $_POST[name]; $tag = $_POST[tag]; if($_SESSION[status]==$tag){ echo $data; }else{ echo "不允許刷新!"; } } $v = mt_rand(1,10000); ?> <?php echo $v; $_SESSION[status] = $v; ?>

上面的代碼是基于 session的驗證,假設(shè)你在2秒內(nèi)刷新了頁面,那么他會執(zhí)行exit() 函數(shù)輸出一條消息,并退出當(dāng)前腳本,于是就不會加載下面的內(nèi)容,所以這段代碼最好放在header中,先讓代碼執(zhí)行,再加載其他的東西.

如果把代碼放在了footer里,結(jié)果整個頁面都加載了只在最后一行輸出了"請不要頻繁刷新",放在header中,效果比較好,想看效果的話按兩下F5 吧.

當(dāng)然最好的是采用的是新建一個php文件,然后在header調(diào)用.

這樣做的好處有兩個:

一個是修改功能代碼方便,不用每次都打開header文件,也不怕誤改了其他地方的代碼,二是一旦出錯,可以快速修改并檢查,甚至可以直接刪除文件,代碼如下:

<?php include('includes/forbiddenCC.php'); ?>

這里要注意下,必須調(diào)用在所有頁面的最前面.

你也可以結(jié)合cookie與session一起用,代碼如下: 利用文件存儲數(shù)據(jù)

<?php $c_file="counter.txt"; //文件名賦值給變量 //如果文件不存在的操作 if(!file_exists($c_file)) { $myfile=fopen($c_file,"w"); //創(chuàng)建文件 fwrite($myfile,"0"); //置入“0” fclose($myfile); //關(guān)閉文件 } $t_num=file($c_file); //把文件內(nèi)容讀入變量 if($_COOKIE["date"]!="date(Y年m月d日)"){ //判斷COOKIE內(nèi)容與當(dāng)前日期是否一致 $t_num[0]++; //原始數(shù)據(jù)自增1 $myfile=fopen($c_file,"w"); //寫入方式打開文件 fwrite($myfile,$t_num[0]); //寫入新數(shù)值 fclose($myfile); //關(guān)閉文件 //重新將當(dāng)前日期寫入COOKIE并設(shè)定COOKIE的有效期為24小時 setcookie("date","date(Y年m月d日)",time()+60*60*24); }?>

這里讀取數(shù)據(jù)

<?php //使用文本存儲數(shù)據(jù) if($_SESSION[temp]==""){ if(($fp=fopen("counter.txt","r"))==false){ echo "打開文件失敗!"; }else{ //讀取文件中數(shù)據(jù) $counter=fgets($fp,1024); //關(guān)閉文本文件 fclose($fp); //計數(shù)器增加1 $counter++; //以寫的方式打開文本文件 $fp=fopen("counter.txt","w"); //將新的統(tǒng)計數(shù)據(jù)增加1 fputs($fp,$counter); fclose($fp); } //從文本文件中讀取統(tǒng)計數(shù)據(jù) if(($fp=fopen("counter.txt","r"))==false){ echo "打開文件失敗!"; }else{ $counter=fgets($fp,1024); fclose($fp); //輸出訪問次數(shù) echo "數(shù)字計數(shù)器: " .$counter ; } //登錄以后,$_SESSION[temp]的值不為空,給$_SESSION[temp]賦一個1 $_SESSION[temp]=1; }else{ echo ""; }?>

其中counter.txt 文件為同目錄下的記錄登錄數(shù)文件。$counter=fgets($fp,1024); 為讀取文件中數(shù)值型值的方法(可包含小數(shù)點數(shù)值)

以上幾種方案你可以根據(jù)自己的業(yè)務(wù)情況來實現(xiàn).

以上是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有幫助,也希望大家多多支持 php自學(xué)中心

感謝閱讀!

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的内网通修改积分文件_转盘抽奖分享得积分,你是如何防止页面被恶意刷新的的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。