到期的链接

时间:2014-06-28 02:40:59

标签: php html mysql database pdo

所以基本上我正在进行密码重置并希望设置时间限制。这是我的代码

$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

一段时间后过期。有任何想法吗?

1 个答案:

答案 0 :(得分:2)

我认为最安全的方法是将哈希的生成时间存储在数据库中。因此,您将有两列:tokentoken_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.
}