如何在 PHP 中生成在手动重置之前一直有效的唯一令牌


How to generate a unique token that is valid until it's manually reset, in PHP?

我需要某种方法来生成一个可以传递给MySQL数据库的唯一令牌,并存储在那里,直到手动重置。因此,它需要是一个随机令牌,将向用户显示,该令牌应保持有效,但也具有一些可以重置它的功能 - 例如"重置密钥"链接以自动更新,更改,然后显示新令牌。

我正在尝试这段代码,但每次页面重新加载时它都会刷新:

global $wpdb;
global $user_login;
$token = uniqid();
$hashedtoken = md5($token);
$user = $user_login;
$wpdb->insert('wp_tokens', 
array('user' => $user, 'token' => $hashedtoken),
array('%s','%s')
);
echo $hashedtoken;

很明显,我正在使用Wordpress,如果这很重要的话。我什至不确定PHP是这里的最佳选择。

编辑:我的问题被标记为与此类似,一些很酷的人通知我需要查询数据库以检查用户的令牌是否存在。但是,不知道如何做这些。谢谢。

以下是

PHP关于使用uniqid()生成"随机"字符串的说法:

警告 此函数不会创建随机或不可预测的字符串。这 不得将函数用于安全目的。使用 加密安全的随机函数/生成器和 加密安全哈希函数,以创建不可预测的安全 身份证。

非随机字符串的哈希仍然不是随机的。

以下是有关在 PHP 中生成随机字符串的两个流行问题的链接:

如何使用PHP创建随机字符串?

PHP 随机字符串生成器

首先,您至少应该使用sha http://php.net/manual/de/function.sha1.php - 无论您使用令牌做什么 - 如今的脚本小子喜欢扫描Web以查找仍然使用MD5字符串长度的页面。

一个快速的技巧是检查令牌是否已存在于您的数据库中

md5(uniqid($your_user_login, true))