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 相关文章推荐
从零开始 教你如何搭建Discuz!4.1论坛
Jul 07 PHP
php中explode与split的区别介绍
Oct 03 PHP
php正则表达式使用的详细介绍
Apr 27 PHP
php获取bing每日壁纸示例分享
Feb 25 PHP
php中json_encode UTF-8中文乱码的更好解决方法
Sep 28 PHP
php简单日历函数
Oct 28 PHP
php实现处理输入转义字符的代码
Nov 08 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
May 27 PHP
PHP转换文本框内容为HTML格式的方法
Jul 20 PHP
PHP面试常用算法(推荐)
Jul 22 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
Jul 31 PHP
Laravel 5.5 实现禁用用户注册示例
Oct 24 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
解析如何屏蔽php中的phpinfo()函数
2013/06/06 PHP
两千行代码的PHP学习笔记汇总
2014/10/05 PHP
smarty中常用方法实例总结
2015/08/07 PHP
golang 调用 php7详解及实例
2017/01/04 PHP
PHP基于自定义函数生成笛卡尔积的方法示例
2017/09/30 PHP
javascript一些实用技巧小结
2011/03/18 Javascript
引用 js在IE与FF之间的区别详细解析
2013/11/20 Javascript
javaScript使用EL表达式的几种方式
2014/05/27 Javascript
jQuery实现的图片分组切换焦点图插件
2015/01/06 Javascript
js数组去重的5种算法实现
2015/11/04 Javascript
Jquery中request和request.form和request.querystring的区别
2015/11/26 Javascript
Node.js静态文件服务器改进版
2016/01/10 Javascript
angularjs表格ng-table使用备忘录
2016/03/09 Javascript
怎么引入(调用)一个JS文件
2016/05/26 Javascript
微信小程序 教程之小程序配置
2016/10/17 Javascript
jQuery图片切换动画效果
2017/02/28 Javascript
Web技术实现移动监测的介绍
2017/09/18 Javascript
JavaScript设计模式之原型模式分析【ES5与ES6】
2018/07/26 Javascript
Vue实现固定定位图标滑动隐藏效果
2019/05/30 Javascript
vue 使用element-ui中的Notification自定义按钮并实现关闭功能及如何处理多个通知
2019/08/17 Javascript
[02:22:36]《加油!DOTA》总决赛
2014/09/19 DOTA
wxPython窗口的继承机制实例分析
2014/09/28 Python
详解Python中的Cookie模块使用
2015/07/06 Python
Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享
2016/07/04 Python
python爬虫获取京东手机图片的图文教程
2017/12/29 Python
python基于twisted框架编写简单聊天室
2018/01/02 Python
使用python为mysql实现restful接口
2018/01/05 Python
Django Celery异步任务队列的实现
2019/07/24 Python
python-OpenCV 实现将数组转换成灰度图和彩图
2020/01/09 Python
Python导入模块包原理及相关注意事项
2020/03/25 Python
CSS3弹性盒模型开发笔记(三)
2016/04/26 HTML / CSS
全面解析HTML5中的标准属性与自定义属性
2016/02/18 HTML / CSS
音乐专业自荐信
2014/02/07 职场文书
更夫岗位责任制
2014/02/11 职场文书
冬季施工防火方案
2014/05/17 职场文书
2019年个人工作总结范文(3篇)
2019/08/27 职场文书