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'];
        }
    

      

  • 相关阅读:
    Material和SharedMaterial的区别
    unity 字典序列化的问题
    序列化到本地
    数据分离
    太久没更 重回博客园
    Unity下替换模型后 之前生成的Prefab中的原模型脚本不会丢失
    Enum.Parse
    Assert断言机制
    20170612
    Unity Cookie
  • 原文地址:https://www.cnblogs.com/wxy0126/p/14888170.html
Copyright © 2011-2022 走看看