获取用户IP并限制时间内访问次数

Posted 你的男孩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取用户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\'];
    }

  

以上是关于获取用户IP并限制时间内访问次数的主要内容,如果未能解决你的问题,请参考以下文章

Java获取访问者Ip并限制Ip访问页面

如何应对网站反爬虫策略?如何高效地爬大量数据

云展网教程 | 关于访问次数限制

使用memcache或redis限制某个用户或者某ip用户一段时间内最大投票次数

PHP实现IP访问限制及提交次数的方法详解

PHP实现IP访问限制及提交次数的方法详解