用户订阅后电子邮件到我的网站。我的网站会生成一封确认电子邮件发送给他们。在电子邮件内容,我需要包括激活密钥,是这样的:

www.domain.com/activate.php?key=$generatedKey

您如何生成密钥?使用SHA1($电子邮件)...

产生密钥之后,我将其存储在数据库中,使得当用户点击链接我可以与数据库验证它?我是新来的吧,请大家指教。我需要一个电子邮件确认脚本..

有帮助吗?

解决方案

就个人而言,只是我使用像的东西的组合:

$generatedKey = sha1(mt_rand(10000,99999).time().$email);

碰撞的机会很小,但我建议发送出去(使用唯一的限制是一个简单的方法)之前先检查你的数据库。

其他提示

您基本上有几个选项:

1)创建单个唯一标识符是看似随机的,并将其存储在数据库中与哪个用户名它对应于

2)生成随机密码和包括在链路中的用户ID和密码,并在数据库中存储所述密码

3)使用单向散列函数(MD5,SAH1等)和秘密标识符来加密用户标识符。你不必在数据库中存储加密的用户标识。

选项1是困难的,因为你不必担心检查数据库,看看键已经存在。然而,它是很好的URL不包含用户名被激活。

如果您已经准备使用某种数据库来存储在未来的用户信息(可能是最小的密码),你可以使用选项2.去它并不需要很多的另一列添加到您的数据库。当发送电子邮件,保存的用户名和像为包含用户名的行另一列$键= SHA1(兰特(1,99999)。$的用户名)的东西。然后让你的链接如下所示: http://you.com/activation.php?user= $用户名和密钥= $关键。在activation.php你检查,看看是否关键是等于存储在数据库中的值。

如果你想在你的数据库中使用更少的存储空间,选项3将工作。您可以使用类似$键= SHA1($ mysecret。$的用户名)作为秘密的标识符。使用一些奇怪的,只有你知道为$ mysecret如“aaafj_my_secret_adfaf”。使用相同类型的网址作为选项。然而,因为您可以生成仅基于$用户名$键,你并不需要保存它。所以,当你在activation.php处理,只是检查,看看是否SHA1($ mysecret。$ _GET [用户名])== $ _GET [关键]。如果是这样,你知道你有正确的用户。从理论上讲,只要有足够的注册,有人可以找出你的价值为$ mysecret并生成激活密钥了。但是,你一定会注意到百亿以上才可以开始计算它是什么,它会采取注册的。需要激活的数量是基于散列函数的密钥大小。使用SHA1(160位)与MD5(128位),使其更难猜测你的$ mysecret值。

$guid=md5(uniqid(mt_rand(), true));

如果你在数据库中存储的激活串,后来检查它,你并不需要一个哈希了!

您只需要一个长期的,随机的字符串。你可以生成你想要的东西,就让它长。事实上,它应该理想地什么都没有做相关的电子邮件或用户名做。

这应该这样做,但是可以通过添加一些盐,例如提高它:

$key = sha1($email . 'doYouLikeSauce');

另一种方法是只生成一个随机密码,并通过电子邮件发送。

$code = md5($_POST['username'] . microtime()); 
scroll top