我将日期(最后一次尝试)、尝试计数器和 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/