PHP代码 设置用户登陆限制,3次错误锁定账户5分钟

我的php页面设置了需要密码才能访问,并设置了半小时自动注销。我还需要增加一个功能,就是密码输入3次错误,锁定账户5分钟。请问如何写代码?谢谢<?phpsession_s... 我的php页面设置了需要密码才能访问,并设置了半小时自动注销。
我还需要增加一个功能,就是密码输入3次错误,锁定账户5分钟。
请问如何写代码?谢谢

<?php
session_start();
if(isset($_POST['password']) && $_POST['password'] == '123456'){
$_SESSION['ok'] = 1;
header('location:?');
}
if(!isset($_SESSION['ok'])){
exit('
<form method="post">
password:<input type="password" name="password" />
<input type="submit" value="login" />
</form>
');
}

// cookie保存时间,分钟
$lifeTime = 1800;
setcookie(session_name(), session_id(), time() + $lifeTime, "/");

?>
展开
 我来答
帐号已注销
2018-04-12 · TA获得超过2.3万个赞
知道小有建树答主
回答量:147
采纳率:0%
帮助的人:5.6万
展开全部

$_SESSION['num'] += 1; if($_SESSION['num'] >= 3){此处操作数据库 帐号状态改为锁定 并记录当前锁定时间。

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保存时间,分钟   

$lifeTime = 1800;   

setcookie(session_name(), session_id(), time() + $lifeTime, "/");   }

else

{echo '你已经输错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; 

} ?>通过SESSION和cookie可以简单的就实现了。

百度网友4c69616
2016-08-24 · TA获得超过120个赞
知道小有建树答主
回答量:228
采纳率:50%
帮助的人:184万
展开全部
$_SESSION['num'] = 0;
if(isset($_POST['password']) && $_POST['password'] == '123456'){
    $_SESSION['ok'] = 1;
    header('location:?');
}else{
    $_SESSION['num'] += 1;
    if($_SESSION['num'] >= 3){
        //此处操作数据库 帐号状态改为锁定 并记录当前锁定时间
        
    }
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
品流教你做潮男
2016-08-24 · TA获得超过141个赞
知道小有建树答主
回答量:247
采纳率:93%
帮助的人:82.9万
展开全部
<?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保存时间,分钟   
$lifeTime = 1800;   
setcookie(session_name(), session_id(), time() + $lifeTime, "/");   
}
else
{echo '你已经输错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; 


?>

通过SESSION和cookie可以简单的就实现了

更多追问追答
追问
谢谢。您这个代码有点问题,密码输入错误3次之后出现了惊人的一幕,
页面显示“你已经输错3次密码,请等5分钟再试试”,然后居然就把网页内容暴露出来了。
师傅您能再修正一下吗?
追答
echo '你已经输错3次密码,请等5分钟再试试';
//改为
exit( '你已经输错3次密码,请等5分钟再试试');
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
词弯0
2018-02-20 · TA获得超过842个赞
知道小有建树答主
回答量:1223
采纳率:80%
帮助的人:294万
展开全部
老哥大过年的还加班啊。。
你可以设置一个数据库字段,用于叠加失败次数,失败一次加一。如果叠加到三次,那么便设置用户为不可用状态(比如用户状态 0 禁止 1 可用 2 失败禁止)。然后设置一个禁用的时间(什么时候禁用结束),在用户登录的方法里可以先验证用户是否失败禁止登录,然后再判断失效时间,过了才做登录判断。如果用户登录成功则将该字段还原失败次数为0。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
站群哥
2018-02-21
知道答主
回答量:16
采纳率:0%
帮助的人:1.4万
展开全部
加一个判断错误次数的代码就行了,具体的你可以参考开源的CMS 的后台登录代码
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式