PHP 检查 30 分钟的登录尝试

标签 php mysql

我将日期(最后一次尝试)、尝试计数器和 IP 插入到 mysql 数据库中,以便在登录页面中控制登录尝试,如下所示:

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

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

我的代码:

$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 次或更多,并且时间戳不超过 30 分钟。 如果您找到了它,那么您就不想显示登录表单。

关于PHP 检查 30 分钟的登录尝试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26315078/

相关文章:

php - 如何防止 JSON 编码和唯一 id 生成器之间发生冲突?

php - 通过 PHP 使用 R

php - 使用 AJAX 和 PHP 监控数据库的变化

php - 如何从同一服务器上的另一个页面提取特定div的内容?

python - 使用python导出特定值的mysql数据

c++ - MySQL PreparedStatement 注意事项

mysql - Zabbix监控工具数据库连接问题

php - 如何将XML元素的值写入MySQL数据库?

php - 联系表单问题 - 我确实收到消息,但没有内容(空白页)

PHP 错误类的对象无法转换为字符串