PHP实现redis限制单ip、单用户的访问次数功能

PHP实现redis限制单ip、单用户的访问次数功能

本文实例讲述了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;
}
?>

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/112899.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm pyqt5图形界面UI配置[通俗易懂]

    pycharm pyqt5图形界面UI配置[通俗易懂]二.安装pyqt5打开图形界面designer执行命令:pip(或pip3)installpyqt5安装完成可能没有Qtdesigner.exe文件,此时需要安装Qt的工具包:pipinstallPyQt5-tools-ihttp://pypi.douban.com/simple–trusted-host=pypi.douban.com1安装完成会在site…

    2025年6月29日
    4
  • matlab一阶惯性滤波,为什么一阶惯性环节也具有滤波的作用

    matlab一阶惯性滤波,为什么一阶惯性环节也具有滤波的作用在用simulink搭建模型的时候,发现一阶惯性环节具有滤波的作用,这是为什么呢?我们以一阶惯性环节200pi/(s+200pi)为例进行说明。首先从传递函数G(s)的频率特性说起。所谓系统的频率特性,是指系统在单位正弦相量作用下的稳态响应。因此,令传递函数中的s=jw,就可以得到系统的频率特性G(jw)。G(jw)是频率w的复变函数。他的幅值为|G(jw)|,相角为相角(G(jw))。当w从0到…

    2022年10月5日
    12
  • unity vr虚拟现实完全自学教程 pdf_ug80完全自学手册pdf

    unity vr虚拟现实完全自学教程 pdf_ug80完全自学手册pdf如何快速学习VR开发,以及HTCvive的使用。

    2025年10月3日
    5
  • vue项目封装组件_前端组件封装

    vue项目封装组件_前端组件封装前言在使用vue进行日常开发的时候,组件的封装是一个很常规的操作,也可以从npm仓库下载别人封装好的组件来使用,比如iview,elementui等…但每个项目的应用场景不同,所以我们有时也需要自己封装组件。而如果在开发中换了项目,那么就只能复制代码过去,略显麻烦,这个时候呢,可以将封装好的组件上传到npm仓库,需要使用时就可以直接通过npm指令下载,非常方便。1.环境准备因为我们封装的是Vue组件,所以直接在脚手架中封装即可。//创建项目因为我们只需封装组件所以RouterSt

    2022年9月23日
    4
  • phpstorm2021.12.13激活【中文破解版】

    (phpstorm2021.12.13激活)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html4D5UJRVIF9-eyJsaWNlbnNlSWQi…

    2022年3月30日
    50
  • url转换成二维码_地址转化为二维码

    url转换成二维码_地址转化为二维码前言根据公司业务需求,需要将指定的url催缴二维码,于是有了以下总结,作为一个记录,以便以后可以用到哦!一、将url直接生成二维码packagecom.xiaojukeji.it.common.util;importcom.google.zxing.BarcodeFormat;importcom.google.zxing.EncodeHintType;importcom.go…

    2025年9月19日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号