我在创造一个落日的暂停。在我的代码中,其他的东西都运行得很好。以下是我对超时的规范:
我仍然需要它来计时用户48小时,并显示一条消息让用户知道他们已经超时。如果你能帮我解决这个问题,我会非常感激的。下面是代码片段:
下面是登录尝试的代码片段:
if (!$pw_ok) {
if (isset($_SERVER["REMOTE_ADDR"])) {
$str_RemoteHost = $_SERVER["REMOTE_ADDR"];
} else {
$str_RemoteHost = '';
}
$qry_WriteToDatabase = " INSERT INTO cms_user_login_attempts
(
cula_user_id,
cula_date_time,
cula_remote_host,
cula_attempt_count
)
VALUES (
" . $db->SQLString($row->user_id) . ",
Now(),
" . $db->SQLString($str_RemoteHost, true) . ",
'cula_attempt_count'
)";
$db->query($qry_WriteToDatabase);
$qry_UpdateCount = " UPDATE
cms_user_login_attempts
SET
cula_attempt_count = cula_attempt_count + 1
WHERE
cula_user_id = " . $db->SQLString($row->user_id) . " ";
$db->query($qry_UpdateCount);
$qry_CheckDatabase = " SELECT
CASE WHEN count(*) >= 5 THEN 0 ELSE 1 END as allowed_login
FROM
cms_user_login_attempts
WHERE
cula_date_time >= DATE_SUB(CURRENT_TIMESTAMP, interval 48 hour)
AND
cula_user_id = " . $db->SQLString($row->user_id) . "";
$rs_CheckDatabase = $db->query($qry_CheckDatabase);
if (! (isset($qry_CheckDatabase) && $qry_CheckDatabase)) {
$errors->defineError("invalid_user_pass", "Bleh.", array("username","password"));
}
}编辑:我已经更新了问题和代码。
发布于 2015-01-05 13:30:48
您需要在密码验证之前保存登录尝试。
if (! (isset($pw_ok) && $pw_ok))因此,添加一个名为cula_login_success的布尔字段,以指示密码验证是否成功。
然后查询该日期的故障数,SQL应该如下所示:
$qry="select cula_user_id,count(*) from cms_user_login_attempts where DATEDIFF(cula_date_time,NOW())<=2 and cula_user_id=".$db->SQLString($row->user_id)+" and not exist(select cula_user_id from cms_user_login_attempts where DATEDIFF(cula_date_time,NOW())<=2 and cula_user_id=".$db->SQLString($row->user_id)+" and cula_login_success=1) group by cula_user_id having count(*)>5";这个查询应该返回一个空集,如果不返回-那么这意味着您的用户尝试登录失败超过5次,在2天内,没有成功登录之间。
发布于 2015-01-05 13:28:00
table
--------------------------
user_id | attempts | datetime每次登录失败时,都会向尝试和更新日期时间添加一个。当用户正确登录时,您将更新db并将尝试设置为零。如果调度是相等或大于5,您首先检查日期时间,看看它是否大于24小时,如果是,您登录和重置调度,否则,您显示一条消息,不尝试登录。
发布于 2015-01-05 13:14:01
在您的表中,您应该记录该尝试是否成功。然后,在再次加载表单之前,检查用户在过去24小时内是否有5次尝试失败,并决定是锁定帐户还是让用户再次尝试。
https://stackoverflow.com/questions/27780213
复制相似问题