一、原理

提交次数是肯定要往数据库里写次数这个数据的,比如用户登陆,当用户出错时就忘数据库写入出错次数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;
}
}

文章转载:https://mp.weixin.qq.com/s/kpvl88uza1owk8rhnhsJjg

PHP实现IP访问限制及提交次数的方法详解的更多相关文章

  1. PHP中IP地址与整型数字互相转换详解

    这篇文章主要介绍了PHP中IP地址与整型数字互相转换详解,本文介绍了使用PHP函数ip2long与long2ip的使用,以及它们的BUG介绍,最后给出自己写的两个算法,需要的朋友可以参考下 IP转换成 ...

  2. ip头、tcp头、udp头详解及定义,结合Wireshark抓包看实际情况

    公司的同事们在分析网页加载慢的问题,忽然使用到了Wireshark工具,我就像发现新大陆一样好奇,赶紧看了看,顺便复习了一下相关协议.上学时学的忘的差不多了,汗颜啊! 报文封装整体结构 mac帧头定义 ...

  3. PHP转换IP地址到真实地址的方法详解

    本篇文章是对PHP转换IP地址到真实地址的方法进行了详细的分析介绍,需要的朋友参考下   想要把IPv4地址转为真实的地址,肯定要参考IP数据库,商业的IP数据库存储在关系型数据库中,查询和使用都非常 ...

  4. C# 中4个访问符和8个修饰符详解

    4个访问修饰符(是添加到类.结构或成员声明的关键字) Public:公有的,是类型和类型成员的访问修饰符.对其访问没有限制. Internal:内部的,是类型和类型成员的访问修饰符.同一个程序集中的所 ...

  5. TortoiseGit学习系列之TortoiseGit基本操作修改提交项目(图文详解)

    前面博客 TortoiseGit学习系列之TortoiseGit基本操作克隆项目(图文详解) TortoiseGit基本操作修改提交项目 项目克隆完成后(可以将克隆 clone 理解为 下载,检出 c ...

  6. Git学习系列之Git基本操作提交项目(图文详解)

    前面博客 Git学习系列之Git基本操作克隆项目(图文详解) 然后可以 cd 切换到 LispGentleIntro 目录, 新增或者修改某些文件.这里只是模拟一下操作, 实际情况可能是 使用 Ecl ...

  7. [web] Get和Post区别,EncType提交数据的格式详解

    转载自:http://www.cnblogs.com/sunxucool/archive/2012/12/11/2813113.html 1. get是从服务器上获取数据,post是向服务器传送数据. ...

  8. Get和Post区别,EncType提交数据的格式详解——转自他人博客的

    1. get是从服务器上获取数据,post是向服务器传送数据. 2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到.post是通过 ...

  9. flask-limiter限制单个IP访问的频率和次数

    Flask-Limiter provides rate limiting features to flask routes. It has support for a configurable bac ...

随机推荐

  1. 前端小白凭什么杀进 BAT?

    七天国庆黄金周转眼即逝,退散的除了出游的热情,还有一波求职热潮...IT 行业的技术者,时常被称为“码农.IT民工” 虽然行业内巨大的人才需求和相对容易得到的高薪,在源源不断的吸引各路人马加入,但它依 ...

  2. mod_fcgid: HTTP request length 136136 (so far) exceeds MaxRequestLen (131072)

    原来是fastcgi模式下的设置问题,需要在配置文件.htaccess或者直接在apache的配置文件http.conf 中指明,如下: 查看官方说明有这么一句:Default: FcgidMaxRe ...

  3. 基于ArduinoLeonardo板子的BadUSB攻击实战

    0X00 前言 在Freebuf上许多同学已经对HID攻击谈了自己的看法,如维克斯同学的<利用Arduino快速制作Teensy BadUSB>无论从科普还是实践都给我们详尽的描述了Bad ...

  4. git 实现提交远程分支步骤

    git clone git branch [分支名] 创建分支 git branch 查看本地所有分支 git checkout [分支名称] 切换分支 ---写代码--- git status (查 ...

  5. win10自动锁屏问题

    电源管理里面无论如何设置自动关闭屏幕时间.自动睡眠和休眠的时间,以及关闭屏保等,在2分钟(确切是2分多一点)后电脑自动睡眠. 这是系统无人值守时睡眠时间的设定,默认是两分钟.解决方法:1.运行注册表管 ...

  6. HDU 6075 Questionnaire 17多校4 水题

    Problem Description In order to get better results in official ACM/ICPC contests, the team leader co ...

  7. 【Python】xpath-1

    1.coverage包实现代码覆盖率 (1)pip install coverage (2)coverage run XX.py(测试脚本文件) (3)coverage report -m 在控制台打 ...

  8. CodeForces - 441D: Valera and Swaps(置换群)

    A permutation p of length n is a sequence of distinct integers p1, p2, ..., pn (1 ≤ pi ≤ n). A permu ...

  9. CodeForces - 1101D:GCD Counting (树分治)

    You are given a tree consisting of n vertices. A number is written on each vertex; the number on ver ...

  10. ccf-170902-公共钥匙盒(模拟)

    这是一道典型的模拟题 首先我们把借钥匙和还钥匙切分成两个事件 保存于两个数组中 然后我对还钥匙的活动按照时间发生次序和还得钥匙序号排序,即按照题意对事件发生的次序排序 最后按照时间的进行 一个一个进行 ...