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 与 MySQL 数据库操作函数详解
Oct 09 PHP
php导出csv数据在浏览器中输出提供下载或保存到文件的示例
Apr 24 PHP
从零开始学YII2框架(一)通过Composer安装Yii2框架
Aug 20 PHP
php中mail函数发送邮件失败的解决方法
Dec 24 PHP
php读取csc文件并输出
May 21 PHP
php面向对象与面向过程两种方法给图片添加文字水印
Aug 26 PHP
PHP定时执行任务的3种方法详解
Dec 21 PHP
Yii2.0 Basic代码中路由链接被转义的处理方法
Sep 21 PHP
PHP使用ActiveMQ实例
Feb 05 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
Feb 07 PHP
thinkPHP5框架闭包函数与子查询传参用法示例
Aug 02 PHP
Mac系统下搭建Nginx+php-fpm实例讲解
Dec 15 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 Socket写的POP3类
2013/10/30 PHP
分享PHP-pcntl 实现多进程代码
2016/09/30 PHP
PHP+JavaScript实现无刷新上传图片
2017/02/21 PHP
thinkPHP5分页功能实现方法分析
2017/10/25 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
php面试实现反射注入的详细方法
2019/09/30 PHP
PhpStorm2020 + phpstudyV8 +XDebug的教程详解
2020/09/17 PHP
[原创]静态页面也可以实现预览 列表不同的显示方式
2006/10/14 Javascript
国外的为初学者写的JavaScript教程
2008/06/09 Javascript
javascript for循环设法提高性能
2010/02/24 Javascript
Javascript 面向对象之重载
2010/05/04 Javascript
Prototype源码浅析 String部分(四)之补充
2012/01/16 Javascript
js清除input中type等于file的值域(示例代码)
2013/12/24 Javascript
JS获取select-option-text_value的方法
2013/12/26 Javascript
采用call方式实现js继承
2014/05/20 Javascript
基于JavaScript实现div层跟随滚动条滑动
2016/01/12 Javascript
jQuery EasyUI Layout实现tabs标签的实例
2017/09/26 jQuery
基于vue实现分页效果
2017/11/06 Javascript
js实现把时间戳转换为yyyy-MM-dd hh:mm 格式(es6语法)
2017/12/28 Javascript
详解Vue的钩子函数(路由导航守卫、keep-alive、生命周期钩子)
2018/07/24 Javascript
详解vue的双向绑定原理及实现
2019/05/05 Javascript
Express结合Webpack的全栈自动刷新
2019/05/23 Javascript
微信小程序如何修改radio和checkbox的默认样式和图标
2019/07/24 Javascript
JavaScript实现身份证验证代码实例
2019/08/26 Javascript
jquery将信息遍历到界面上实例代码
2020/01/21 jQuery
vue实现防抖的实例代码
2021/01/11 Vue.js
python实现多线程的方式及多条命令并发执行
2016/06/07 Python
ML神器:sklearn的快速使用及入门
2019/07/11 Python
女子锻炼服装和瑜伽服装:Splits59
2019/03/04 全球购物
英国领先的酒杯和水晶玻璃器皿制造商:Dartington Crystal
2019/06/23 全球购物
俄罗斯香水在线商店:AromaCode
2019/12/04 全球购物
What is view? why do we have view?
2012/06/22 面试题
2015年幼师工作总结
2015/04/28 职场文书
pdf论文中python画的图Type 3 fonts字体不兼容的解决方案
2021/04/24 Python
关于python pygame游戏进行声音添加的技巧
2021/10/24 Python
详解JS数组方法
2021/11/20 Javascript