为电子邮件确认生成确认代码

2022-08-30 13:37:24

使用PHP,有哪些方法可以生成可以存储在数据库中并用于电子邮件确认的随机确认代码?我无法为我的生活想出一种方法来生成可以从用户的个人资料中生成的唯一数字。这样,我就可以使用函数使数字足够小以包含在URL中(请参阅此链接)。请记住,用户必须单击链接以“确认/激活”他/她的帐户。如果我不能使用数字,我使用字母和数字都没有问题。

话虽如此,我尝试将用户名与“salt”一起散列以生成随机代码。我知道必须有更好的方法,所以让我们听听。


答案 1
$random_hash = md5(uniqid(rand(), true));

这将是32个字母数字字符长而独特。如果你想让它更短,只需使用substr():

$random_hash = substr(md5(uniqid(rand(), true)), 16, 16); // 16 characters long

生成随机数据的替代方法包括:

$random_hash = md5(openssl_random_pseudo_bytes(32));
$random_hash = md5(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM));

// New in PHP7
$random_hash = bin2hex(random_bytes(32));

答案 2

1) 在数据库中创建激活字段

2)注册后发送电子邮件

3)创建一个链接以包含在电子邮件中,使用唯一标识符看起来像这样

欢迎用户名 感谢您的注册。

请点击下面的链接激活您的帐户

domain.com/register.php?uid=100&activate=1

4) 将激活字段更新为 true

alt text
(资料来源:jackborn.com

$email_encrypt = urlencode($email);
$special_string = 'maybeyourcompanynamereversed?';
$hash = md5($email_encrypt.$special_string);

Here is the link that is sent to the email that was provided:

http://yourdoman.com/confirm.php?hash='.$hash.'

The actual link will look something like this:

http://yourdomain.com/confirm.php?hash=00413297cc003c03d0f1ffe1cc8445f8

推荐