2010-01-06 115 views
6

我该如何检查邮件是否存在? 不能理解的网站怎么做才能有一个独特的链接发送邮件的用户点击来验证自己是电子邮件的所有者=/发送激活邮件给用户

做一个2个新列名为激活密钥并激活和存储一些随机字符串,请发送电子邮件与激活密钥,并更新激活的用户= 1匹配激活链接

register.php?a=activate&key=9cdfb439c7876e703e307864c9167a15 

有什么更好的想法?

回答

16

我通常会发送一个包含用户标识和激活码的链接。当他们访问我的激活脚本时,如果我找到一个匹配,我激活它们。

当他们注册时,我会生成大概32个字母的大写/小写字母数字字符并将其设置为激活密钥。此时,您可以创建一个名为“激活”的字段,或者您可以假设用户在激活密钥的情况下未被激活。

 
uid |  email  | key 
------------------------------------------------------------ 
001 | [email protected] | e09141f3f5a17fed6222fc0279b9afdf 
------------------------------------------------------------ 
002 | [email protected] | 
------------------------------------------------------------ 

当用户访问激活脚本,只需检查所提供的密钥与所提供的ID一起,如果找到匹配,删除从文件的用户记录的键(或更新您的布尔“激活”领域)并打开门。

如果提供的电子邮件地址不存在,则不会丢失。闲置一个月后,您可以定期使用按键删除所有行。

+0

不错!非常感谢!顺便说一句,生成一个关键你认为md5(uniqid());会好的?不想要2个用户使用相同的密钥:P – Martin 2010-01-06 22:31:21

+1

同一个uniqid的md5仍然是相同的 - 您可以使用uniqid的前缀(也许是他们的电子邮件的md5),或使用uniq id的'更多熵'标志 – eCaroth 2010-01-06 22:38:17

+2

smart 。以为我会用md5(电子邮件); thx – Martin 2010-01-06 22:41:21

0

有没有简单的方法来检查电子邮件是否实际上以编程方式存在。有一些方法(ping邮件服务器等),但没有证明可以与每个邮件服务器的设置一起工作。强制用户通过您描述的链接激活他们的帐户是最好的方式。此外,您可能希望有一些类似cron-job的循环脚本,可以在一段时间后删除未激活的成员(这将需要表中的另一列,时间戳)。

这很有用,因为如果用户注册但不会激活他们的帐户并删除电子邮件,并且您将他们的电子邮件用作id(仅举例),他们将永远无法完成激活。或者,如果他们尝试登录,则可以重新将激活电子邮件重新发送到该地址。

只要确保在电子邮件中指定了所有标题(回复来自等),这样您的电子邮件就不会被标记为垃圾邮件。

+0

这种检查邮件是否存在的方法并非万无一失。它不能确保电子邮件属于用户。 存在一次性邮件服务,您可以在其中获得临时电子邮件地址。用户可能会使用其中一项服务,激活其帐户并登录系统。过了一会儿,临时地址被禁用。 – 2010-01-07 00:23:12

2

激活密钥的一种替代方法是仅将生成的密码发送到用户电子邮件,如果用户登录,他被激活(当然,应该能够将密码更改为他喜欢的密码)。

相关问题