当前位置:首页 > PHP教程 > php高级应用 > 列表

PHP实现redis限制单ip、单用户的访问次数功能示例

发布:smiling 来源: PHP粉丝网  添加日期:2021-10-01 16:53:59 浏览: 评论:0 

这篇文章主要介绍了PHP实现redis限制单ip、单用户的访问次数功能,结合实例形式分析了php连接redis及获取、记录客户端信息,并限制客户访问次数等操作技巧,需要的朋友可以参考下。

本文实例讲述了PHP实现redis限制单ip、单用户的访问次数功能,分享给大家供大家参考,具体如下:

有时候我们需要限制一个api或页面访问的频率,例如单ip或单用户一分钟之内只能访问多少次

类似于这样的需求很容易用Redis来实现

  1. <?php 
  2. $redis = new Redis(); 
  3. $redis->connect('127.0.0.1', 6379); 
  4. $redis->auth("php001"); 
  5. //这个key记录该ip的访问次数 也可改成用户id 
  6. //$key = 'userid_11100'; 
  7. $key=get_real_ip(); 
  8. //限制次数为5 
  9. $limit = 5; 
  10. $check = $redis->exists($key); 
  11. if($check){ 
  12.   $redis->incr($key); 
  13.   $count = $redis->get($key); 
  14.   if($count > 5){ 
  15.     exit('请求太频繁,请稍后再试!'); 
  16.   } 
  17. }else
  18.   $redis->incr($key); 
  19.   //限制时间为60秒 
  20.   $redis->expire($key,60); 
  21. $count = $redis->get($key); 
  22. echo '第 '.$count.' 次请求'
  23. //获取客户端真实ip地址 
  24. function get_real_ip(){ 
  25.   static $realip
  26.   if(isset($_SERVER)){ 
  27.     if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){ 
  28.       $realip=$_SERVER['HTTP_X_FORWARDED_FOR']; 
  29.     }else if(isset($_SERVER['HTTP_CLIENT_IP'])){ 
  30.       $realip=$_SERVER['HTTP_CLIENT_IP']; 
  31.     }else
  32.       $realip=$_SERVER['REMOTE_ADDR']; 
  33.     } 
  34.   }else
  35.     if(getenv('HTTP_X_FORWARDED_FOR')){ 
  36.       $realip=getenv('HTTP_X_FORWARDED_FOR'); 
  37.     }else if(getenv('HTTP_CLIENT_IP')){ 
  38.       $realip=getenv('HTTP_CLIENT_IP'); 
  39.     }else
  40.       $realip=getenv('REMOTE_ADDR'); 
  41.     } 
  42.   } 
  43.   return $realip
  44. ?>

Tags: redis PHP限制单ip

分享到: