zoukankan      html  css  js  c++  java
  • 获取用户IP并限制时间内访问次数

    首先获取用户IP地址:

    public function ipPrevent()
        {
            if (getenv('HTTP_CLIENT_IP')) {
                $ip = getenv('HTTP_CLIENT_IP');
            }
            if (getenv('HTTP_X_REAL_IP')) {
                $ip = getenv('HTTP_X_REAL_IP');
            } elseif (getenv('HTTP_X_FORWARDED_FOR')) {
                $ip = getenv('HTTP_X_FORWARDED_FOR');
                $ips = explode(',', $ip);
                $ip = $ips[0];
            } elseif (getenv('REMOTE_ADDR')) {
                $ip = getenv('REMOTE_ADDR');
            } else {
                $ip = '0.0.0.0';
            }
            return $ip;
        }

    我这里是拿到IP后根据标识存到redis哈希里,然后从里面拿:

    一分钟 不能超过 20次

    时间和次数自己更改

    public static function checkWithTimes($ip,$type)
        {
            $key = "ip:$ip:$type";
            $redis = Yii::$app->redis;
            $check = $redis->exists($key);
            if($check){
                $redis->incr($key);
                $count = $redis->get($key);
                if($count > 20) {
                    return ['code'=>1,'msg'=>'刷新请求过快,请稍后重试!'];
                }
            }else{
                $redis->incr($key);
                //限制时间为60秒
                $redis->expire($key,60);
            }
            $count = $redis->get($key);
            return ['code'=>0,'msg'=> 'You have '.$count.' request'];
        }
    

      

  • 相关阅读:
    动态字节码技术Javassist
    自己实现简单版的注解Mybatis
    AOP实现事务和记录日志
    自己实现简单版SpringMVC
    静态变量
    docker安装nginx , 安装mysql5.6,安装redis3.2
    Worker Thread模式
    linux 安装jdk
    dockfile构建自己的tomcat
    docker使用2
  • 原文地址:https://www.cnblogs.com/wxy0126/p/14888170.html
Copyright © 2011-2022 走看看