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);
    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;
    }

  • 相关阅读:
    transient关键字
    java 序列化,反序列化工具
    switch case语法
    java空map定义
    斐波那契数列的实现算法
    正则表达式
    java业务逻辑代码中需要增加一些与主流业务无关操作
    阿里巴巴开发手册对manager层的定义
    july 19
    bulletproof monk quote
  • 原文地址:https://www.cnblogs.com/ysboke/p/11255337.html
Copyright © 2011-2022 走看看