• 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);
    if($check){
    $redis->incr($key);
    $count = $redis->get($key);
    if($count > 3){
    exit('已经超出了限制次数');
    }

    }else{
    $redis->incr($key);
    //限制时间为60秒
    $redis->expire($key,60);
    }

    $count = $redis->get($key);
    echo '第 '.$count.' 次请求';

    获取ip方法

    function get_real_ip() {
    static $realip = NULL;
    if ($realip !== NULL) {
    return $realip;
    }
    if (isset($_SERVER)) {
    if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
    /* 取X-Forwarded-For中第一个非unknown的有效IP字符串 */
    foreach ($arr AS $ip) {
    $ip = trim($ip);
    if ($ip != 'unknown') {
    $realip = $ip;
    break;
    }
    }
    } elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
    $realip = $_SERVER['HTTP_CLIENT_IP'];
    } else {
    if (isset($_SERVER['REMOTE_ADDR'])) {
    $realip = $_SERVER['REMOTE_ADDR'];
    } else {
    $realip = '0.0.0.0';
    }
    }
    } else {
    if (getenv('HTTP_X_FORWARDED_FOR')) {
    $realip = getenv('HTTP_X_FORWARDED_FOR');
    } elseif (getenv('HTTP_CLIENT_IP')) {
    $realip = getenv('HTTP_CLIENT_IP');
    } else {
    $realip = getenv('REMOTE_ADDR');
    }
    }
    // 使用正则验证IP地址的有效性,防止伪造IP地址进行SQL注入攻击
    preg_match("/[d.]{7,15}/", $realip, $onlineip);
    $realip = !empty($onlineip[0]) ? $onlineip[0] : '0.0.0.0';
    return $realip;
    }

  • 相关阅读:
    大文件上传插件
    大文件上传解决方案
    up7-文件保存位置
    up6-自定义文件存储路径
    up7.1-asp.net-本地测试教程
    文件上传控件产品比较
    IIS支持解析json
    IE8控件安装方法
    IE9控件安装方法
    gets()函数详解和缺陷
  • 原文地址:https://www.cnblogs.com/ysboke/p/11255337.html
Copyright © 2020-2023  润新知