php中用memcached實現(xiàn)頁面防刷新功能
有個新需求要加上去,防止用戶頻繁刷新頁面。具體需求是當(dāng)用戶在一分鐘之后內(nèi)請求指定的頁面超過100次,就直接拒絕請求。仔細分析后發(fā)現(xiàn)這個功能用memcache來做最方便:
1、以用戶IP和被請求的文件名作為KEY值。
2、以memcached的方法increment()來自增記錄用戶訪問次數(shù),increment()是原子性增加,準(zhǔn)確。
3、設(shè)置set()時指定過期時間為60s,這樣就統(tǒng)計一分鐘的訪問次數(shù)。
于是寫了個函數(shù)放在項目的初始化文件中調(diào)用,函數(shù)內(nèi)容如下:
function requestCount(){ $patharr = pathinfo($_SERVER['PHP_SELF']); $filename = explode('?',$patharr['basename']);//獲取當(dāng)前文件名 if( in_array($filename['0'],array('index.php','login.php','password.php')) ){ global $memcache; $clientip = get_client_ip(); //使用長整型IP和文件名生成KEY $ipkey = 'C'.sprintf("%u", ip2long( $clientip )). $filename['0'] ; if( $visitCount = $memcache->get($ipkey) ){ if($visitCount == 100){ die('<h1>Please don\'t refresh your page!</h1>'); }else{ $memcache->increment($ipkey); } }else{ $memcache->set($ipkey,1,0,60); } } }
相關(guān)文章
使用Curl進行抓取遠程內(nèi)容時url中文編碼問題示例探討
在編碼時應(yīng)該只對部分URL編碼,否則URL中的冒號和反斜杠也會被轉(zhuǎn)義,下面有兩個不錯的示例,有類似情況的朋友可以感受下2013-10-10php實現(xiàn)微信模擬登陸、獲取用戶列表及群發(fā)消息功能示例
這篇文章主要介紹了php實現(xiàn)微信模擬登陸、獲取用戶列表及群發(fā)消息功能,結(jié)合具體實例形式分析了php微信接口的相關(guān)調(diào)用與操作技巧,需要的朋友可以參考下2017-06-06PHP Swoole異步Redis客戶端實現(xiàn)方法示例
這篇文章主要介紹了PHP Swoole異步Redis客戶端實現(xiàn)方法,結(jié)合實例形式詳細分析了php操作Swoole異步Redis客戶端相關(guān)擴展安裝與功能實現(xiàn)技巧,需要的朋友可以參考下2019-10-10PHP中echo,print_r與var_dump區(qū)別分析
這篇文章主要介紹了PHP中echo,print_r與var_dump區(qū)別分析,主要講述了三者的類型本質(zhì)及其操作數(shù)據(jù)類型的用法區(qū)別,非常具有實用價值,需要的朋友可以參考下2014-09-09php中字符集轉(zhuǎn)換iconv函數(shù)使用總結(jié)
這篇文章主要介紹了php中字符集轉(zhuǎn)換iconv函數(shù)使用總結(jié),本文同時介紹了mb_convert_encoding函數(shù),需要的朋友可以參考下2014-10-10PHP利用REFERER根居訪問來地址進行頁面跳轉(zhuǎn)
這篇文章主要是根據(jù)referfer判斷來源,然后跳轉(zhuǎn)到制定頁面,以防出現(xiàn)了無法訪問頁面,用戶體驗不好2013-09-09深入解讀php中關(guān)于抽象(abstract)類和抽象方法的問題分析
這篇文章主要介紹了php中關(guān)于抽象(abstract)類和抽象方法的問題分析,有需要的朋友可以參考一下2014-01-01php中關(guān)于token驗證的相關(guān)問題詳解
這篇文章主要介紹了php中關(guān)于token驗證的相關(guān)問題詳解的相關(guān)資料,需要的朋友可以參考下2023-05-05