【发布时间】:2015-07-10 22:05:41
【问题描述】:
我的问题有点棘手,找不到有效表达它的正确方式。 我正在创建一个独特的激活字符串/链接,它结合了 PHP 中的散列用户名和时间。 但是,将数据发送到我的数据库的确切时间和将电子邮件激活链接发送到用户的电子邮件帐户所需的实际时间是不同的(可能以毫秒为单位,有时以秒为单位)——这基本上意味着我有不同的电子邮件我的数据库和电子邮件帐户中的激活链接。 让我展示一个代码sn-p:
$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 发送电子邮件。
【问题讨论】:
-
您可以简单地将唯一字段(例如电子邮件或用户名)和
md5它。在这种情况下它将是独一无二的。 -
时间不同是正常的,你只需要两次操作都使用一次。当您将信息保存在数据库中时,这是一项成本更高的操作。您必须利用这段时间发送链接和其他所需的操作。
-
那么
$activate_code的值应该只被评估一次,所以没有理由它们应该不同。time也已经在几秒钟内了。您确定//few more lines of code then...部分中的某些内容没有修改$activate_code? -
另外,您尝试使用算术加法运算符 (
+) 将字符串(md5()返回字符串)与 int(返回值time())连接起来。由于md5不返回由 php 直接解析为 int 的值,因此结果将被解释为 0 并且您当前正在丢失您的 ID 的 md5 部分。 (例如小提琴:Link) -
感谢您的帮助和建议,@Andrew 这个答案可能是我将要实施的,感谢您提出的宝贵意见,以后会考虑。