为电子邮件激活生成唯一字符串链接PHP

时间:2015-07-10 13:51:47

标签: php email phpmailer

我的问题有点棘手,无法找到有效表达方式。 我正在创建一个独特的激活字符串/链接,它结合了PHP中的哈希用户名和时间。 但是,将数据发送到我的数据库的确切时间以及将电子邮件激活链接发送到用户的电子邮件帐户所需的实际时间是不同的(可能以毫秒,有时是几秒) - 这基本上意味着我有不同的电子邮件激活我的数据库和电子邮件帐户的链接。 让我展示一个代码段:

$username = $_POST[‘username’];
$table = ‘users’;
$activate_field = ‘activate’;
$activate_code = md5($_POST[‘username’]) +  time(); //provides unique code for activating
//few more lines of code then…
$query = $connect-> prepare(“INSERT INTO $table $acivate_field VALUES $activate_code”);
$query->execute();

//then the long code for sending the email with the activation code appended to the user’s email account

是否有更好的方法可以每秒生成唯一的字符串? 感谢您的时间并感谢任何帮助和/或建议.P.S我使用phpmailer发送电子邮件。

3 个答案:

答案 0 :(得分:3)

mysql中的

UUID()更好,但php中的uniqid()前缀为microtime可能是一个不错的选择。

答案 1 :(得分:2)

只需将生成的代码写入变量,然后将变量写入邮件和数据库 我可以看到你已经将代码保存在变量中,然后将其包含在你的查询中

在旁注中,您不应直接访问$ _POST等超级全局,因为用户输入可能是恶意的 并且出于同样的原因,您应该使用PDO预处理语句而不是字符串构建查询

答案 2 :(得分:1)

md5uniqidtime的组合可以{{3}},所以它在同一秒内也是唯一的。

$activate_code = md5(uniqid(time()));