php memcached 加锁,php中用memcached实现页面防刷新功能

有个新需求要加上去,防止用户频繁刷新页面。具体需求是当用户在一分钟之后内请求指定的页面超过100次,就直接拒绝请求。仔细分析后发现这个功能用memcache来做最方便:

1、以用户IP和被请求的文件名作为KEY值。

2、以memcached的方法increment()来自增记录用户访问次数,increment()是原子性增加,准确。

3、设置set()时指定过期时间为60s,这样就统计一分钟的访问次数。

于是写了个函数放在项目的初始化文件中调用,函数内容如下:

function requestCount(){

$patharr = pathinfo($_SERVER['PHP_SELF']);

$filename = explode('?',$patharr['basename']);//获取当前文件名

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('

Please don\'t refresh your page!

');

}else{

$memcache->increment($ipkey);

}

}else{

$memcache->set($ipkey,1,0,60);

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值