【发布时间】:2011-11-06 09:59:15
【问题描述】:
在过去的两天里,我发布了几个关于 cookie 的问题。我几乎完成了我的家庭作业,但是遇到了一个问题。
我需要让我的用户有尽可能多的机会登录我网站的 cmets 部分,但是,如果他们在 30 秒内尝试失败 5 次,他们将被锁定 3 分钟。为了计算 5 次尝试,我这样做了:
if(isset($_COOKIE['cookie1'])){
if(isset($_COOKIE['cookie2'])){
if(isset($_COOKIE['cookie3'])){
if(isset($_COOKIE['cookie4'])){
header('Location: reading_cat.php');
setcookie("locked_out", "cookie", time()+180);
}setcookie("cookie4", "cookie4", time()+30);
}setcookie("cookie3", "cookie3", time()+30);
}setcookie("cookie2", "cookie2", time()+30);
}setcookie("cookie1", "cookie1", time()+30);
这很好用,除了一个问题。当用户尝试失败时,会设置一个 cookie。如果他尝试 2 失败,则检查 cookie 1,如果存在则设置 cookie 2,然后继续。在这种情况下,每次添加连续 cookie 时,出于某种原因,所有 cookie 的到期日期都会写入最后一次添加 cookie 的时间。
换种说法:cookie 1 在 6:00 并且没有秒数添加,它的到期时间是 6:00 和 30 秒。 Cookie 2 在 6:00 和 15 秒添加,到期时间为 6:00 和 45 秒。我认为 cookie 1 应该保持不变,但是当我检查时,现在 cookie 1 的有效期与 cookie 2 相同。因此,这种情况下的所有 cookie 同时过期(这不好)。
我做错了什么?
【问题讨论】:
-
一团糟!老兄,你真的应该考虑改变你正在使用的整个代码。
-
设置一千个不同的 cookie 也没有意义。将尝试次数写入一个 cookie,然后检查该值。这实际上不会是防篡改,但更有意义。
-
很公平,这是我第一次做这些事情。我知道制作一个名为 count 的 cookie,并检查它增加了多少次,但我如何检查用户在 30 秒内尝试了 5 次?用户可以在 15 秒内尝试 4 次,然后等待 30 秒,然后他们应该再次尝试 5 次。如果我只是数,没有办法告诉。
-
对我来说就像一个楼梯大师!感谢锻炼! :D