【发布时间】:2015-03-03 00:44:54
【问题描述】:
我正在创建一个登录超时。我的代码上的其他一切都运行良好。这是我对超时的规范:
- 如果用户在 24 小时内输入密码错误 5 次,则将其锁定 48 小时。
- 如果用户在 5 次尝试和 24 小时内正确输入密码,则重置他们的尝试。
我仍然需要它来让用户超时 48 小时,并显示一条消息让用户知道他们已经超时。如果你能帮我解决这个问题,我将不胜感激。这是代码sn-p:
这是登录尝试的代码的 sn-p:
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"));
}
}
编辑:我已经更新了问题和代码。
【问题讨论】:
-
您的问题缺乏针对性。
-
“如果用户在 5 次尝试中输入了正确的密码,我希望为该用户重置尝试。” - 更新有问题的行
WHERE子句。 -
具体是什么不起作用?你已经向我们描述了你想要做什么,但你没有解释你遇到的问题。
-
乍一看为什么
$_SERVER["REMOTE_ADDR"]会参与其中? a) 它不可靠 b) 断开与 isp 的连接以刷新 IP 地址并重试 -
@andrew,为了让他免于怀疑,代码中没有任何逻辑暗示他正在查看 REMOTE_ADDR 以确定它是否是同一用户。他可能希望它在那里仅用于记录目的。