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语法(4)
Oct 09 PHP
一个SQL管理员的web接口
Oct 09 PHP
PHP session常见问题集锦及解决办法总结
Mar 18 PHP
php Ubb代码编辑器函数代码
Jul 05 PHP
VPS中使用LNMP安装WordPress教程
Dec 28 PHP
PHP获取POST数据的几种方法汇总
Mar 03 PHP
php源码分析之DZX1.5加密解密函数authcode用法
Jun 17 PHP
smarty的section嵌套循环用法示例
May 28 PHP
一个简单安全的PHP验证码类 附调用方法
Jun 24 PHP
PHP实现登陆表单提交CSRF及验证码
Jan 24 PHP
php微信开发之谷歌测距
Jun 14 PHP
浅谈如何提高PHP代码的质量
May 28 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 Mysql类 可以参考学习熟悉下
2009/06/21 PHP
php 取得瑞年与平年的天数的代码
2009/08/10 PHP
PHP 透明水印生成代码
2012/08/27 PHP
php操作xml并将其插入数据库的实现方法
2016/09/08 PHP
PHP中检查isset()和!empty()函数的必要性
2019/02/13 PHP
PHP如何将图片文件上传到另外一台服务器上
2019/08/26 PHP
.net,js捕捉文本框回车键事件的小例子(兼容多浏览器)
2013/03/11 Javascript
jquery对单选框,多选框,文本框等常见操作小结
2014/01/08 Javascript
直接在JS里创建JSON数据然后遍历使用
2014/07/25 Javascript
node.js中的fs.ftruncate方法使用说明
2014/12/15 Javascript
JavaScript设计模式之适配器模式介绍
2014/12/28 Javascript
JavaScript中利用各种循环进行遍历的方式总结
2015/11/10 Javascript
7个jQuery最佳实践
2016/01/12 Javascript
浅谈几种常用的JS类定义方法
2016/06/08 Javascript
移动端日期插件Mobiscroll.js使用详解
2016/12/19 Javascript
Vue.js 2.0和Cordova开发webApp环境搭建方法
2018/02/26 Javascript
使用Promise封装小程序wx.request的实现方法
2019/11/13 Javascript
原生js canvas实现鼠标跟随效果
2020/08/02 Javascript
vue动态设置页面title的方法实例
2020/08/23 Javascript
[55:39]DOTA2-DPC中国联赛 正赛 VG vs LBZS BO3 第二场 1月19日
2021/03/11 DOTA
python fabric实现远程操作和部署示例
2014/03/25 Python
Python的加密模块md5、sha、crypt使用实例
2014/09/28 Python
Python语言进阶知识点总结
2019/05/28 Python
python plotly画柱状图代码实例
2019/12/13 Python
python+selenium+Chrome options参数的使用
2020/03/18 Python
canvas生成带二维码海报的踩坑记录
2019/09/11 HTML / CSS
Jack Rogers官网:美国经典的女性鞋靴品牌
2019/09/04 全球购物
Tommy Hilfiger澳洲官网:美国高端休闲领导品牌
2020/12/16 全球购物
党员个人对照检查材料思想汇报
2014/09/16 职场文书
大学生国庆节65周年演讲稿范文
2014/09/25 职场文书
音乐教师个人工作总结
2015/02/06 职场文书
导游词之河北邯郸
2019/09/12 职场文书
python plt.plot bar 如何设置绘图尺寸大小
2021/06/01 Python
React 高阶组件HOC用法归纳
2021/06/13 Javascript
Oracle表空间与权限的深入讲解
2021/11/17 Oracle
windows系统安装配置nginx环境
2022/06/28 Servers