zoukankan      html  css  js  c++  java
  • 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.' 次请求';
    世界上最美的风景,是自己努力的模样
  • 相关阅读:
    java多线程之系列目录
    RecyclerView的源码分析
    ConCurrentHashMap在1.7和1.8区别
    插件化之细节
    组件化之开发细节
    组件化之开发总结
    线程之volatile基本内容
    线程之Synchronized基本内容
    设计模式之动态代理模式原理介绍
    操作系统之内存映射
  • 原文地址:https://www.cnblogs.com/xiong-hua/p/14111001.html
Copyright © 2011-2022 走看看