zoukankan      html  css  js  c++  java
  • PHP实现redis限制单ip、单用户的访问次数功能

    有时候我们需要限制一个api或页面访问的频率,例如单ip或单用户一分钟之内只能访问多少次

    类似于这样的需求很容易用Redis来实现

    <?php
    $redis = new Redis();
    $redis->connect('127.0.0.1', 6379);
    $redis->auth("php001");
    //这个key记录该ip的访问次数 也可改成用户id
    //$key = 'userid_11100';
    $key=get_real_ip();
    //限制次数为5
    $limit = 5;
    $check = $redis->exists($key);
    if($check){
      $redis->incr($key);
      $count = $redis->get($key);
      if($count > 5){
        exit('请求太频繁,请稍后再试!');
      }
    }else{
      $redis->incr($key);
      //限制时间为60秒
      $redis->expire($key,60);
    }
    $count = $redis->get($key);
    echo '第 '.$count.' 次请求';
    //获取客户端真实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;
    }
    ?>
  • 相关阅读:
    剑指offer-第二章排序之年龄排序
    剑指offer—第二章算法之快速排序
    java小程序(课堂作业02)
    关于java的一些小知识(课程作业01)
    Java从命令行接受多个数字并求和
    《大道至简》第一章读后感及伪代码
    大道至简读后感
    GCPC 2013_A Boggle DFS+字典树 CSU 1457
    Aizu 2155 Magic Slayer 背包DP
    UVALive 4255 Guess
  • 原文地址:https://www.cnblogs.com/swmin/p/9914995.html
Copyright © 2011-2022 走看看