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+mysql一个名片库程序
Oct 09 PHP
PHP gbk环境下json_dencode传送来的汉字
Nov 13 PHP
php查找任何页面上的所有链接的方法
Dec 03 PHP
在PHP程序中使用Rust扩展的方法
Jul 03 PHP
PHP 自动加载的简单实现(推荐)
Aug 12 PHP
php封装的mysqli类完整实例
Oct 18 PHP
laravel 5.3中自定义加密服务的方案详解
May 09 PHP
PHP基于IMAP收取邮件的方法示例
Aug 07 PHP
如何修改Laravel中url()函数生成URL的根地址
Aug 11 PHP
详解PHP文件的自动加载(autoloading)
Feb 04 PHP
php empty 函数判断结果为空但实际值却为非空的原因解析
May 28 PHP
php session_decode函数用法讲解
May 26 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
php反弹shell实现代码
2009/04/22 PHP
第七章 php自定义函数实现代码
2011/12/30 PHP
php标签云的实现代码
2012/10/10 PHP
thinkphp模板继承实例简述
2014/11/26 PHP
php创建多级目录与级联删除文件的方法示例
2019/09/12 PHP
PHP中类与对象功能、用法实例解读
2020/03/27 PHP
JavaScript this 深入理解
2009/07/30 Javascript
JS 文件本身编码转换 图文教程
2009/10/12 Javascript
jquery入门—编写一个导航条(可伸缩)
2013/01/07 Javascript
js处理自己不能定义二维数组的方法详解
2014/03/03 Javascript
首页图片漂浮效果示例代码
2014/06/05 Javascript
Javascript在IE和Firefox浏览器常见兼容性问题总结
2016/08/03 Javascript
javascript获取以及设置光标位置
2017/02/16 Javascript
JS脚本加载后执行相应回调函数的操作方法
2018/02/28 Javascript
Vue.js中对css的操作(修改)具体方式详解
2018/10/30 Javascript
js实现自定义右键菜单
2020/05/18 Javascript
arcgis.js控制地图地体的显示范围超出区域自动弹回(实现思路)
2021/01/28 Javascript
python进阶教程之异常处理
2014/08/30 Python
Python实现Sqlite将字段当做索引进行查询的方法
2016/07/21 Python
Python网络爬虫与信息提取(实例讲解)
2017/08/29 Python
使用Python实现windows下的抓包与解析
2018/01/15 Python
python实现对文件中图片生成带标签的txt文件方法
2018/04/27 Python
python使用__slots__让你的代码更加节省内存
2018/09/05 Python
Python图像处理之图像的缩放、旋转与翻转实现方法示例
2019/01/04 Python
Django通过json格式收集主机信息
2020/05/29 Python
python中的插入排序的简单用法
2021/01/19 Python
python实现简单的学生管理系统
2021/02/22 Python
联想中国官方商城:Lenovo China
2017/10/18 全球购物
常用UNIX 命令(Linux的常用命令)
2015/12/26 面试题
学习保证书范文
2014/04/30 职场文书
经典演讲稿汇总
2014/05/19 职场文书
领导干部民主生活会自我剖析材料范文
2014/09/20 职场文书
大学生党员批评与自我批评
2014/09/28 职场文书
2019最新公司租房合同(例文)
2019/07/18 职场文书
教你如何用python开发一款数字推盘小游戏
2021/04/14 Python
如何解决flex文本溢出问题小结
2022/07/15 HTML / CSS