PHP检查登录尝试30分钟


PHP Check login attempts for 30 minutes

我在mysql数据库中插入日期(上次尝试)、尝试计数器和ip,以便在我的登录页面中控制登录尝试,如下所示:

| id  |      ip       |   date     | attempts |
|  1  |  192.168.1.2  | 1412932824 |     5    |

现在在登录页面中,如果用户尝试次数=5,我需要删除我的表单30分钟。

MyCode:

$checkip = Access::FETCH("SELECT * FROM " . LOGIN_ATTEMPTS . "
                   WHERE
      ip = ? AND panel = ? ", _IS_GET_IP_ADDRESS_() , '1');
if (count($checkip > 0))
    {
    $time = new DateTime();
    $time->setTimestamp($checkip[0]['date']);
    $time->modify('+30 minutes');
    $timeattempts = $time->format('U');
    if ($checkip[0]['attempts'] <= 5 && $timeattempts < time())
        {
        // FORM SHOW
        }
    else
        {
        // SHOW ONLY ERROR
        }
    }

但这个代码对我和$timestamp > time(). 来说并不适用

如何修复我的代码以防止登录尝试?

注意:在操作中,我会更新日期(上次尝试)和每次登录尝试的尝试次数。

您只需在查询上执行即可:

$timestamp = strtotime("-30 minutes");
$checkip = Access::FETCH("SELECT * FROM " . LOGIN_ATTEMPTS . "
                          WHERE
                          ip = ? AND panel = ? AND attempts >= ? AND date <= ? ",
                          _IS_GET_IP_ADDRESS_() , '1', 5, $timestamp);
if (empty($checkip))
{
    // FORM SHOW
}
else
{
    // SHOW ONLY ERROR
}

基本上,你搜索5次或5次以上的尝试,时间戳不超过30分钟。如果你找到了,那么你就不想显示登录表单了。