如何validation用户点击我发送给他/她的电子邮件中的链接?

这是一个更为集中的问题,由此前的post引发。 我需要通过certificate他/她可以访问它来validation用户的电子邮件地址。 我在下面复制了一个您希望在加入开发者论坛或用户组时看到的通用电子邮件身份validation。 作为注册过程的一部分,您需要提供您的电子邮件地址,然后您会收到一封电子邮件,要求您点击某些内容来validation您的电子邮件地址。

我需要对用户点击电子邮件中的链接时发生的任何事情进行编码。 所以我的问题是 – 我该怎么做?

涉及哪些技术? 任何人都可以带我走过这些台阶吗? 我更喜欢像bash这样的Java或Linux脚本语言。 更好的是,有没有为此目的开发的软件,我可以在我的Linux服务器上安装,并以某种方式集成它与我的数据库交谈? 这在实践中是如何完成的? 如果它已经可用,我不想重新发明一些东西。

To confirm your email address of: youremail@yourdomain.net please send a short reply to this address: users-sc.1496854427.ckdpbmhncdlkjadkajfpecc-mylist=yourdomain.net@listdomain.com Usually, this happens when you just hit the "reply" button. If this does not work, simply copy the address and paste it into the "To:" field of a new message. or click here: mailto:users-sc.1496854427.ckdpbmhncdlkjadkajfpecc-mylist=yourdomain.net@listdomain.com This confirmation serves two purposes. First, it verifies that I am able to get mail through to you. Second, it protects you in case someone forges a subscription request in your name. Some mail programs are broken and cannot handle long addresses. If you cannot reply to this request, instead send a message to  and put the entire address listed above into the "Subject:" line. 

在您的用户数据库中,您需要有一个登台用户表(或在主用户表中添加一个列,指示用户是否处于活动状态并将指示器默认为“否”)。 当用户首次注册时,您将从用户信息的一部分生成唯一的哈希码,例如,在用户主键和名称上使用md5(或者您可以通过解密获得的其他一组用户变量)。 将此哈希码设置为您发送给用户的链接中的查询字符串参数。 最后,当用户单击链接时,从查询字符串中获取哈希码,对其进行解密并将解密后的值与数据库中的用户行进行匹配。 如果找到匹配项,请将“活动”指示符设置为true,然后将其设置为presto。 或者,如果您使用了临时表,则将用户记录移动到用于执行授权的“活动用户”表。

回复一封独特的电子邮件以validation某人的电子邮件是否存在固有缺陷,可以伪造(除非您检查标题和IP)。 例如,我访问您的网站进行注册。 您告诉我回复users-sc.1496854427.ckdpbmhncdlkjadkajfpecc-mylist=yourdomain.net@listdomain.com 。 我使用垃圾邮件机器人的mail()函数来回复。 游戏结束。 目的失败了。

相反,您可以在我的注册ID上向我发送validation链接。 类似于example.com/verify?userid=1&hash=67gk65fs6714fgsHguj

在users表中:

 id|username|status|onetimehash --+--------+------+------------------------- 1|testuser| 0 |67gk65fs6714fgsHguj 

现在,在validation调用中检查userid和hash。 如果它们与数据库中的值匹配,则可以安全地validation用户。 为了生成散列,您可以将用户名的md5或sha1值与时间戳或某个随机数等盐混合使用。

更新如果您要使用以前的解决方案,即捕获用户的回复以validation电子邮件,则必须设置自己的邮件服务器。 Fetchmail可以帮到你。 您必须以编程方式阅读电子邮件标题并从, or 字段中提取所需信息。 像userid = 1496854427和hash = ckdpbmhncdlkjadkajfpecc。 在此过程中您可能需要正则表达式。 一旦你有这些值,它非常简单,检查数据库值。

底线是:前者不仅比较繁琐,而且比后者更脆弱。 大多数webapps使用第二种解决方案,因为它更清洁,更明智。

我知道BalusC给出了一个最佳答案的链接
这是链接: 更好的答案 。
我在我的项目中实现了这一点。 希望这会有助于他人。