我需要某种方法来生成一个可以传递给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))