我需要在3次尝试后阻止登录

时间:2016-04-28 15:22:08

标签: php session login limit

所以我有这段代码:

<?php
session_start();
if (!isset($_SESSION['count'])) {
  $_SESSION['count'] = 0;
} 
if(isset($_SESSION['count'])) {
  $_SESSION['count']++;
  $num = 3 - $_SESSION['count'];
  echo $num.' login attempts left.';
  if($_SESSION['count'] < 0)
    {
        session_destroy("count");
        unset($_SESSION["count"]);
        echo 'negative :/';
    }

}
if($_SESSION['count'] == 3)
{
    echo 'Your session is locked for 30 minutes.';
    if(!$_SESSION['timeout']) 
    {
        $_SESSION['timeout'] = time();
    }
    $st = $_SESSION['timeout'] + 180; //session time is 30 minutes
    if(time() < $st)
    { }
    elseif(time() >= $st) {
        session_destroy("count");
        session_destroy("timeout");
        unset($_SESSION['count']);
        unset($_SESSION['timeout']);
    }

}
?>

某处是错误但我无法找到它:( 我只需要在不使用数据库的情况下限制登录尝试,只需简单的会话。

你能帮助我吗?

3 个答案:

答案 0 :(得分:0)

首先,你的第二个if应该是我认为的另一个。

if (!isset($_SESSION['count'])) {
  $_SESSION['count'] = 0;
} else {
...

否则,第一个语句将检查是否未设置$_SESSION['count']。 如果是这样,它会将其设置为0.然后对于第二个如果它将被设置并且$_SESSION['count']++;将总是将此计数增加到1.因此它至少总是为1.

第二件事是你不会减少代码中任何地方的计数。 所以永远不会达到0。

如果您详细了解确切的错误,我们可以帮助您更好。

请记住,可以使用简单的方法取消会话基础身份验证。例如。通过tor访问您的网站或每次达到登录限制时使用代理。

答案 1 :(得分:0)

你认为黑客会存储会话cookie并帮助你吗?

您无法使用会话进行暴力保护。你需要申请状态。

这是我对上一个问题的回答:Block request for multiple unsuccessful logins for a period of time

答案 2 :(得分:-1)

您不需要写入文件。用户尝试登录的Foreach时间,返回false。您应该为_SESSION [&#39; count&#39;]添加+1。将该代码放入函数中。您的_SESSION [&#39; count&#39;]是全局的,所以当它的3用户将被锁定时。