php中用memcached實(shí)現(xiàn)頁面防刷新功能
有個(gè)新需求要加上去,防止用戶頻繁刷新頁面。具體需求是當(dāng)用戶在一分鐘之后內(nèi)請求指定的頁面超過100次,就直接拒絕請求。仔細(xì)分析后發(fā)現(xiàn)這個(gè)功能用memcache來做最方便:
1、以用戶IP和被請求的文件名作為KEY值。
2、以memcached的方法increment()來自增記錄用戶訪問次數(shù),increment()是原子性增加,準(zhǔn)確。
3、設(shè)置set()時(shí)指定過期時(shí)間為60s,這樣就統(tǒng)計(jì)一分鐘的訪問次數(shù)。
于是寫了個(gè)函數(shù)放在項(xiàng)目的初始化文件中調(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)文章
php提示無法加載或mcrypt沒有找到 PHP 擴(kuò)展 mbstring解決辦法
今天幫客戶配置phpmyadmin的時(shí)間,無法加載 mcrypt (外鏈,英語) 擴(kuò)展,請檢查您的 PHP 配置。2012-03-03
php使用指定編碼導(dǎo)出mysql數(shù)據(jù)到csv文件的方法
這篇文章主要介紹了php使用指定編碼導(dǎo)出mysql數(shù)據(jù)到csv文件的方法,涉及php查詢mysql及操作csv文件的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03
PHP 多維數(shù)組的排序問題 根據(jù)二維數(shù)組中某個(gè)項(xiàng)排序
PHP 多維數(shù)組排序 根據(jù)二維數(shù)組中某個(gè)項(xiàng)排序,需要的朋友可以參考下。2011-11-11
解析php session_set_save_handler 函數(shù)的用法(mysql)
本篇文章是對php中session_set_save_handler 函數(shù)的用法(mysql)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
詳解phpmyadmin相關(guān)配置與錯(cuò)誤解決
這篇文章主要介紹了詳解phpmyadmin相關(guān)配置與錯(cuò)誤解決的相關(guān)資料,希望通過本文能幫助到大家,讓大家遇到這種問題可以解決,需要的朋友可以參考下2017-10-10

