PHP设置登陆限制 登陆多少次错误锁定账户5分钟 IP密码错误超限封停
我们在使用PHP开发网站登录程序的时候经常需要设置一个限制,某个IP的用户登陆超过一定限制,就锁定登陆多少分钟或者小时,也就是如果输入密码登陆出错达到一定次数就不让再尝试登陆,这样可以防止密码被暴力破解。
现在先看看程序
login.php
<?php
session_start();
ini_set('session.gc_maxlifetime', 300); //设置SESSION过期时间
$ip = getIp();
if($_SESSION[$ip] < 3){
if(isset($_POST['password']) && $_POST['password'] == '123456'){
$_SESSION['ok'] = 1;
$_SESSION[$ip] = 0;//登录成功,IP登录次数归零
header('location:?');
}
if(!isset($_SESSION['ok'])){
$_SESSION[$ip] = $_SESSION[$ip] + 1;//累积登录错误次数
exit('
<form method="post">
password:<input type="password" name="password" />
<input type="submit" value="login" />
</form>
');
}
// cookie保存session_id用于跨页面传递读取sessin
$lifeTime = 1800;
setcookie(session_id, session_id(), time() + $lifeTime, "/");
}
else
{exit( '你已经输错3次密码,请等5分钟再试试');}
//获取用户真实IP
function getIp(){
$onlineip='';
if(getenv('HTTP_CLIENT_IP')&&strcasecmp(getenv('HTTP_CLIENT_IP'),'unknown')){
$onlineip=getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR')&&strcasecmp(getenv('HTTP_X_FORWARDED_FOR'),'unknown')){
$onlineip=getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR')&&strcasecmp(getenv('REMOTE_ADDR'),'unknown')){
$onlineip=getenv('REMOTE_ADDR');
} elseif(isset($_SERVER['REMOTE_ADDR'])&&$_SERVER['REMOTE_ADDR']&&strcasecmp($_SERVER['REMOTE_ADDR'],'unknown')){
$onlineip=$_SERVER['REMOTE_ADDR'];
}
return $onlineip;
}
?>其他页面获取登陆状态,可以用
<?php session_id($_COOKIE['session_id']);session_start();if ($_SESSION['ok'] != 1; ) { header("Location: login.php"); exit(); } ?>
顶(19)
踩(0)
- 最新评论
