1. 程式人生 > 實用技巧 >PHP結合Redis來限制使用者或者IP某個時間段內訪問的次數

PHP結合Redis來限制使用者或者IP某個時間段內訪問的次數

$redis = new Redis();    
$redis->connect('127.0.0.1', 6379);   

//獲取客戶端真實ip地址  
function get_real_ip(){  
    static $realip;  
    if(isset($_SERVER)){  
        if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){  
            $realip=$_SERVER['HTTP_X_FORWARDED_FOR'];  
        }else if(isset($_SERVER['
HTTP_CLIENT_IP'])){ $realip=$_SERVER['HTTP_CLIENT_IP']; }else{ $realip=$_SERVER['REMOTE_ADDR']; } }else{ if(getenv('HTTP_X_FORWARDED_FOR')){ $realip=getenv('HTTP_X_FORWARDED_FOR'); }else if(getenv('HTTP_CLIENT_IP
')){ $realip=getenv('HTTP_CLIENT_IP'); }else{ $realip=getenv('REMOTE_ADDR'); } } return $realip; } //這個key記錄該ip的訪問次數 也可改成使用者id $key = get_client_ip(); //該Key記錄訪問的次數,目前是以IP為例,也可以把使用者id作為key,如userid_123456 //限制次數為3次。 $limit = 3; $check
= $redis->exists($key); //檢視該key值是否存在 if($check){ $redis->incr($key); //將key值自增加一 $count = $redis->get($key); //拿到key值是多少 if($count > 3){ exit('已經超出了限制次數'); } }else{ $redis->incr($key); //限制時間為60秒 $redis->expire($key,60); //key值得過期時間是60秒 } $count = $redis->get($key); echo ''.$count.' 次請求';