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


Posted in PHP onJune 16, 2018

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

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP6 中可能会出现的新特性预览
Apr 04 PHP
ecshop实现smtp发送邮件
Feb 03 PHP
利用PHP fsockopen 模拟POST/GET传送数据的方法
Sep 22 PHP
PHP Curl模拟登录微信公众平台、新浪微博实例代码
Jan 28 PHP
PHP如何使用Memcached
Apr 05 PHP
Yii2中多表关联查询hasOne hasMany的方法
Feb 15 PHP
解决PHP上传非标准格式的图片pjpeg失败的方法
Mar 12 PHP
Symfony查询方法实例小结
Jun 28 PHP
PHP自定义递归函数实现数组转JSON功能【支持GBK编码】
Jul 17 PHP
php中的依赖注入实例详解
Aug 14 PHP
在 Laravel 6 中缓存数据库查询结果的方法
Dec 11 PHP
基于PHP实现用户登录注册功能的详细教程
Aug 04 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
Jun 16 #PHP
PHP7.1实现的AES与RSA加密操作示例
Jun 15 #PHP
PHP观察者模式示例【Laravel框架中有用到】
Jun 15 #PHP
PHP堆栈调试操作简单示例
Jun 15 #PHP
在Laravel5.6中使用Swoole的协程数据库查询
Jun 15 #PHP
ThinkPHP框架实现的邮箱激活功能示例
Jun 15 #PHP
基于swoole实现多人聊天室
Jun 14 #PHP
You might like
锁定年轻人的双倍活力 星巴克推出星倍醇即饮浓咖啡
2021/03/03 咖啡文化
php中文件上传的安全问题
2006/10/09 PHP
Windows下Apache + PHP SESSION丢失的解决过程全纪录
2015/04/07 PHP
Yii实现显示静态页的方法
2016/04/25 PHP
IE6弹出“已终止操作”的解决办法
2010/11/27 Javascript
2014年最火的Node.JS后端框架推荐
2014/10/27 Javascript
jquery+php实现搜索框自动提示
2014/11/28 Javascript
jquery使用slideDown实现模块缓慢拉出效果的方法
2015/03/27 Javascript
javascript轮播图算法
2016/10/21 Javascript
Javascript实现从小到大的数组转换成二叉搜索树
2017/06/13 Javascript
js实现HTML中Select二级联动的实例
2018/01/05 Javascript
JavaScript体验异步更好的解决办法
2018/01/08 Javascript
javascript实现获取一个日期段内每天不同的价格(计算入住总价格)
2018/02/05 Javascript
nodejs微信扫码支付功能实现
2018/02/17 NodeJs
JavaScript中字符串的常用操作方法及特殊字符
2018/03/18 Javascript
Vue 路由 过渡动效 数据获取方法
2018/07/31 Javascript
Node.js搭建WEB服务器的示例代码
2018/08/15 Javascript
[47:31]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第一场 12.12
2020/12/16 DOTA
Python实现CET查分的方法
2015/03/10 Python
python使用matplotlib绘图时图例显示问题的解决
2017/04/27 Python
python jieba分词并统计词频后输出结果到Excel和txt文档方法
2018/02/11 Python
python实现list由于numpy array的转换
2018/04/04 Python
在python3中实现查找数组中最接近与某值的元素操作
2020/02/29 Python
Python基于gevent实现高并发代码实例
2020/05/15 Python
python numpy矩阵信息说明,shape,size,dtype
2020/05/22 Python
Python爬取12306车次信息代码详解
2020/08/12 Python
利用python实现后端写网页(flask框架)
2021/02/28 Python
用HTML5实现网站在windows8中贴靠的方法
2013/04/21 HTML / CSS
Linux操作面试题
2012/05/16 面试题
国外的一些J2EE面试题一
2012/10/13 面试题
《鱼游到了纸上》教学反思
2014/02/20 职场文书
《得道多助,失道寡助》教学反思
2014/04/19 职场文书
党建工作经验交流材料
2014/05/25 职场文书
计算机专业自荐信范文
2015/03/26 职场文书
企业党建工作总结2015
2015/05/26 职场文书
Win11应用商店打开闪退怎么解决? win11应用商店打不开的多种解决办法
2022/04/05 数码科技