所以基本上我正在进行密码重置并希望设置时间限制。这是我的代码
$time = time();
$hash = md5($id . $time . "somerandomsalt"); // check this again in activation.php
$link = "activation.php?id=" . $id . "&hash=" . $hash . "&time=" . $time;
这会安全吗?我想做的就是让链接在1小时后过期。我也有这个代码生成一个令牌(我认为这个代码更安全)。
$rand = openssl_random_pseudo_bytes(16); // take 8 random bytes
$token = substr(sha1($rand), 0, 49);
问题是我不确定如何发言
http://localhost:8888/forgot/activate.php?token=467e65833fc977767d5b000929d1229fa5eaf309
一段时间后过期。有任何想法吗?
答案 0 :(得分:2)
我认为最安全的方法是将哈希的生成时间存储在数据库中。因此,您将有两列:token
和token_created_at
(名称无关紧要)。当用户单击该链接时,您将查询token
的数据库并将token_created_at
与当前时间进行比较。如果差异超过一小时,则引发错误。
修改要查找差异,请从DateTime
创建一个token_created_at
对象,然后再添加1小时即可获得到期时间。然后将其与当前时间进行比较。如果当前时间小于到期时间,则表示令牌有效,否则它已过期。代码如下所示:
$token_created_at = new DateTime('2014-06-28 03:14:07');
$expires_at = $token_created_at->modify('+1 hour');
$current_time = new DateTime();
if ($current_time < $expires_at) {
// Token is valid.
} else {
// Token has expired.
}