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 相关文章推荐
PHP4在Windows2000下的安装
Oct 09 PHP
PHP stristr() 函数(不区分大小写的字符串查找)
Jun 03 PHP
PHP5中新增stdClass 内部保留类
Jun 13 PHP
使用HMAC-SHA1签名方法详解
Jun 26 PHP
php curl基本操作详解
Jul 23 PHP
YII路径的用法总结
Jul 09 PHP
php使用PDO操作MySQL数据库实例
Dec 30 PHP
表单提交错误后返回内容消失问题的解决方法(PHP网站)
Oct 20 PHP
php封装db类连接sqlite3数据库的方法实例
Dec 19 PHP
thinkPHP框架实现的简单计算器示例
Dec 07 PHP
Laravel Validator自定义错误返回提示消息并在前端展示
May 09 PHP
详解使用php-cs-fixer格式化代码
Sep 16 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程序实现支持页面后退的两种方法
2008/06/30 PHP
PHP 分页类(模仿google)-面试题目解答
2009/09/13 PHP
PHP提取数据库内容中的图片地址并循环输出
2010/03/21 PHP
PHP实现自动登入google play下载app report的方法
2014/09/23 PHP
详谈PHP程序Laravel 5框架的优化技巧
2016/07/18 PHP
JQUERY CHECKBOX全选,取消全选,反选方法三
2008/08/30 Javascript
让JavaScript 轻松支持函数重载 (Part 1 - 设计)
2009/08/04 Javascript
jquery last-child 列表最后一项的样式
2010/01/22 Javascript
javascript AOP 实现ajax回调函数使用比较方便
2010/11/20 Javascript
jQuery EasyUI API 中文文档 - Pagination分页
2011/09/29 Javascript
使用JavaScript实现网页版Pongo设计思路及源代码分享
2014/06/16 Javascript
JS基于面向对象实现的放烟花效果
2015/05/07 Javascript
javascript事件冒泡和事件捕获详解
2015/05/26 Javascript
javascript连续赋值问题
2015/07/08 Javascript
在javascript中创建对象的各种模式解析
2016/05/16 Javascript
完美解决jQuery符号$与其他javascript 库、框架冲突的问题
2016/08/09 Javascript
js输入框使用正则表达式校验输入内容的实例
2017/02/12 Javascript
MUI 上拉刷新/下拉加载功能实例代码
2017/04/13 Javascript
解决AjaxFileupload 上传时会出现连接重置的问题
2017/07/07 Javascript
详解vue中引入stylus及报错解决方法
2017/09/22 Javascript
基于 jQuery 实现键盘事件监听控件
2019/04/04 jQuery
JQuery实现简单的复选框树形结构图示例【附源码下载】
2019/07/16 jQuery
微信小程序自定义头部导航栏(组件化)
2019/11/15 Javascript
Windows下用py2exe将Python程序打包成exe程序的教程
2015/04/08 Python
使用Python的urllib和urllib2模块制作爬虫的实例教程
2016/01/20 Python
python cx_Oracle的基础使用方法(连接和增删改查)
2017/11/19 Python
python+pandas分析nginx日志的实例
2018/04/28 Python
详解python使用pip安装第三方库(工具包)速度慢、超时、失败的解决方案
2018/12/02 Python
详解python列表(list)的使用技巧及高级操作
2019/08/15 Python
python yield关键词案例测试
2019/10/15 Python
Tensorflow设置显存自适应,显存比例的操作
2020/02/03 Python
Pycharm debug调试时带参数过程解析
2020/02/03 Python
致短跑运动员广播稿
2014/01/09 职场文书
保卫工作个人总结
2015/03/03 职场文书
中学生勤俭节约倡议书
2015/04/29 职场文书
基于Python编写一个监控CPU的应用系统
2022/06/25 Python