PHP实现限制IP访问及提交次数的方法详解


Posted in PHP onJuly 17, 2017

本文实例讲述了PHP实现限制IP访问及提交次数的方法。分享给大家供大家参考,具体如下:

一、原理

提交次数是肯定要往数据库里写次数这个数据的,比如用户登陆,当用户出错时就忘数据库写入出错次数1,并且出错时间,再出错写2,当满比如5次时提示不允许再登陆,请明天再试,然后用DateDiff计算出错时和now()的时间,如果大于24就再开放让他试。

封IP的话特别是给IP断就比较简单了,

先说给IP段开放的情况:先取出客户访问的IP,为了解释方便,设有IP192.168.6.2

现要开放IP段为192.168.*.*的断,给个比较容易看懂的代码吧:

url=split(ip,".") '这里的ip为客户端IP
fsip="192.168.*.*"  '允许的段,可以从数据库取出,也可以这么定义
fip=split(fsip,".")
if fip(0)=url(0) and fip(1)=url(1) then
response.write "您的IP被封"
else response.write "可以通过"
end if

其实禁某IP就跟上面的方法一样。或者干脆从数据库里取出IP和客户端的直接比较就好了。

一般会把数据库里的IP段设为双精度型的,那么就需要这些:

if Request.ServerVariables("HTTP_X_FORWARDED_FOR")="" then
IP=Request.ServerVariables("REMOTE_ADDR")
else
IP=Request.ServerVariables("HTTP_X_FORWARDED_FOR")
end if
sip=IP
cip=split(ip,".")
ip=256*256*256*cip(0)+256*256*cip(1)+256*cip(2)+cip(3)-1

上面的情况都是在数据库操作方面,没涉及cookies等。

其实封IP不是很理想,会影响无辜的人,有关的或许是因为动态IP逃过了。

二、封装实例

<?php
class IP{ //获取客户IP地址
  function getIpAdr(&$ip){
    $ip1=getenv("HTTP_X_FORWARDED_FOR");
    $ip2=getenv("HTTP_CLIENT_IP");
    $ip3=getenv("REMOTE_ADDR");
    if($ip1&&$ip1!='unknow')
      $ip=$ip1; else if($ip2&&$ip2!='unknow')
      $ip=$ip2; else if($ip3&&$ip3!='unknow')
      $ip=$ip3; else
      $ip='127.0.0.1';
  }
}
function get_netip($myip){ //只留客户IP地址的前三位
  $temp=explode(".",$myip);
  $netip.=$temp[0];
  $netip.=".";
  $netip.=$temp[1];
  $netip.=".";
  $netip.=$temp[2];
  return $netip;
}
$filename="test.ini";  //定义操作文件
$ip_lib=file($filename); //读取文件数据到数组中
$allow=0;
$IP=new IP;
$thisip="";
$IP->getIpAdr(&$thisip);
$thenetip=get_netip($thisip);
for ($i=0;$i<count($ip_lib);$i++){
  if(ereg($thenetip,$ip_lib[$i])){
    $allow=1;
    break;
  }
}
if ($allow==1)
{
  echo "验证通过";
} else {
  echo "<script>location.href='Error.php';</script>";
}

三、限制输入次数

1.页面需要先session_start();2.点击登陆的时候做判断,如果确定用户输入的密码是错误的

if(用户的密码是错误的){
  if(!empty($_SESSION['login_error'])){
    if($_SESSION['login_error'] == 3){
      exit("这里已经是第三次了");
    } else{
      $_SESSION['login_error'] = $_SESSION['login_error']++;
    }
  } else{
    $_SESSION['login_error'] = 1;
  }
}

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

PHP 相关文章推荐
如何使用动态共享对象的模式来安装PHP
Oct 09 PHP
PHP之变量、常量学习笔记
Mar 27 PHP
php正则过滤html标签、空格、换行符的代码(附说明)
Oct 25 PHP
PHP基础之运算符的使用方法
Apr 28 PHP
ThinkPHP水印功能实现修复PNG透明水印并增加JPEG图片质量可调整
Nov 05 PHP
php支付宝手机网页支付类实例
Mar 04 PHP
PHP Reflection API详解
May 12 PHP
windows下apache搭建php开发环境
Aug 27 PHP
thinkphp3.2实现在线留言提交验证码功能
Jul 19 PHP
Laravel框架自定义验证过程实例分析
Feb 01 PHP
Laravel5.1 框架数据库操作DB运行原生SQL的方法分析
Jan 07 PHP
php解析非标准json、非规范json的方式实例
Dec 10 PHP
PHP提取字符串中的手机号正则表达式怎么写
Jul 17 #PHP
老生常谈PHP中的数据结构:DS扩展
Jul 17 #PHP
PHPstorm快捷键(分享)
Jul 17 #PHP
利用PHP_XLSXWriter代替PHPExcel的方法示例
Jul 16 #PHP
PHP常用操作类之通信数据封装类的实现
Jul 16 #PHP
Laravel网站打开速度优化的方法汇总
Jul 16 #PHP
PHP实现创建微信自定义菜单的方法示例
Jul 14 #PHP
You might like
第十四节 命名空间 [14]
2006/10/09 PHP
用PHP函数解决SQL injection
2006/10/09 PHP
PHP无限分类(树形类)的深入分析
2013/06/02 PHP
php中autoload的用法总结
2013/11/08 PHP
PHP内核学习教程之php opcode内核实现
2016/01/27 PHP
php自动提交表单的方法(基于fsockopen与curl)
2016/05/09 PHP
Laravel框架Request、Response及Session操作示例
2019/05/06 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
jQuery操作元素css样式的三种方法
2014/06/04 Javascript
javascript简单实现滑动菜单效果的方法
2015/07/27 Javascript
浅谈jquery.form.js的ajaxSubmit和ajaxForm的使用
2016/09/09 Javascript
微信小程序(三):网络请求
2017/01/13 Javascript
JQuery validate 验证一个单独的表单元素实例
2017/02/17 Javascript
vue动态组件实现选项卡切换效果
2017/03/08 Javascript
Vue.js仿Metronic高级表格(二)数据渲染
2017/04/19 Javascript
ES6新特性四:变量的解构赋值实例
2017/04/21 Javascript
在Web关闭页面时发送Ajax请求的实现方法
2019/03/07 Javascript
详解element-ui中el-select的默认选择项问题
2019/08/02 Javascript
在vue中实现echarts随窗体变化
2020/07/27 Javascript
vue-simple-uploader上传成功之后的response获取代码
2020/09/07 Javascript
[03:13]DOTA2-DPC中国联赛1月25日Recap集锦
2021/03/11 DOTA
python实现的各种排序算法代码
2013/03/04 Python
Python使用SQLite和Excel操作进行数据分析
2018/01/20 Python
Centos7 Python3下安装scrapy的详细步骤
2018/03/15 Python
python实现数据写入excel表格
2018/03/25 Python
python 获取字符串MD5值方法
2018/05/29 Python
python版百度语音识别功能
2019/07/09 Python
django的聚合函数和aggregate、annotate方法使用详解
2019/07/23 Python
Python并发concurrent.futures和asyncio实例
2020/05/04 Python
在线课程:Skillshare
2019/04/02 全球购物
英国领先的游戏零售商:GAME
2019/09/24 全球购物
马智宇结婚主持词
2014/04/01 职场文书
高中教师考核方案
2014/05/18 职场文书
设计师求职信
2014/07/01 职场文书
反洗钱宣传活动总结
2014/08/26 职场文书
2015公务员试用期工作总结
2014/12/12 职场文书