php中用memcached實(shí)現(xiàn)頁面防刷新功能
有個(gè)新需求要加上去,防止用戶頻繁刷新頁面。具體需求是當(dāng)用戶在一分鐘之后內(nèi)請(qǐng)求指定的頁面超過100次,就直接拒絕請(qǐng)求。仔細(xì)分析后發(fā)現(xiàn)這個(gè)功能用memcache來做最方便:
1、以用戶IP和被請(qǐng)求的文件名作為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);
}
}
}
- PHP實(shí)現(xiàn)將多個(gè)文件壓縮成zip格式并下載到本地的方法示例
- 基于PHP安裝zip拓展,以及l(fā)ibzip安裝的問題
- PHP獲取真實(shí)客戶端的真實(shí)IP
- 幾行代碼輕松實(shí)現(xiàn)PHP文件打包下載zip
- php實(shí)現(xiàn)替換手機(jī)號(hào)中間數(shù)字為*號(hào)及隱藏IP最后幾位的方法
- THinkPHP獲取客戶端IP與IP地址查詢的方法
- vue-router清除url地址欄路由參數(shù)的操作代碼
- PHP投票系統(tǒng)防刷票判斷流程分析
- php獲取用戶真實(shí)IP和防刷機(jī)制的實(shí)例代碼
相關(guān)文章
php提示無法加載或mcrypt沒有找到 PHP 擴(kuò)展 mbstring解決辦法
今天幫客戶配置phpmyadmin的時(shí)間,無法加載 mcrypt (外鏈,英語) 擴(kuò)展,請(qǐng)檢查您的 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)
本篇文章是對(duì)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

