[mysql]过期的链接

标签: MySQL PHP HTML
发布时间: 2017/4/9 22:00:55
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

所以基本上我现在正在重新设置密码,想要设置一个时间限制。这里是我拥有的代码

$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:

我认为最安全的方式是在数据库中存储的哈希算法生成时间。所以你会有两个列︰ 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.
}
官方微信
官方QQ群
31647020