Php 验证未验证的电子邮件地址?

Php 验证未验证的电子邮件地址?,php,mysql,architecture,Php,Mysql,Architecture,比如说,一个用户在一个网站上注册了一个电子邮件地址,在接受该用户的注册之前,需要首先验证该地址 通常的方法是向提供的电子邮件地址发送电子邮件。然后,用户检查他/她的收件箱并单击一个链接,该链接将告诉站点该电子邮件地址是有效的。通常,链接中会嵌入某种代码,告诉站点它是否是电子邮件地址的合法验证 我的问题是关于代码的。实施它的最佳方式是什么?一些想法: 在站点中输入新地址时,将生成一个随机字符串。该随机字符串存储在数据库中,然后通过电子邮件发送给注册人。电子邮件中的链接将包含随机字符串作为URL的一

比如说,一个用户在一个网站上注册了一个电子邮件地址,在接受该用户的注册之前,需要首先验证该地址

通常的方法是向提供的电子邮件地址发送电子邮件。然后,用户检查他/她的收件箱并单击一个链接,该链接将告诉站点该电子邮件地址是有效的。通常,链接中会嵌入某种代码,告诉站点它是否是电子邮件地址的合法验证

我的问题是关于代码的。实施它的最佳方式是什么?一些想法:

  • 在站点中输入新地址时,将生成一个随机字符串。该随机字符串存储在数据库中,然后通过电子邮件发送给注册人。电子邮件中的链接将包含随机字符串作为URL的一部分
  • 地址是散列的。这意味着不需要在数据库中保存任何内容,因为应用程序将知道如何取消对此内容的刷新。(我对这种方法的担忧是,如果用户后来将其电子邮件地址更改为他以前输入的地址,哈希值将是相同的。不确定这是否会造成某种安全威胁。)
  • 还有别的办法吗

  • 我正在寻找解决这个问题的一般建议。

    我每次都使用第一种方法

  • 创建一个随机代码
  • 将其存储在DB
  • 通过可点击的链接将其发送给用户,如activation.php?key=blabla
  • 在激活页面,用户也可以手动输入
  • 在提交时比较键
  • 激活用户
  • 如果用户更改邮件地址,返回1

  • 第一,随机字符串,是最安全(也是最常见的)的方式:它使我完全不可能恶意地对我没有收到电子邮件的电子邮件地址进行操作


    此外,您可以在成功完成后删除随机字符串,以明确该特定地址不再需要激活。

    Pekka,我实际上计划在数据库中设置
    verified\u email\u address
    unverified\u email\u address
    字段。我想现在我也会有一个
    验证\u code
    字段。我认为我需要2个电子邮件地址字段的原因是,用户可以在以后更改他的电子邮件地址。在过渡期间,我需要记录两个电子邮件地址,对吗?由于我的已验证电子邮件地址必须是唯一的,我需要应用程序层检查未验证的电子邮件地址是否不存在于这两个字段???@堆栈中,这听起来很合理。或者,我想你可以有一个“已验证”标志,如果用户更改了他们的电子邮件地址,该标志将被删除,这可能会产生相同的效果。像谷歌这样的巨头做的完全不同:他们允许你拥有许多电子邮件地址,所有这些地址你都必须单独激活。但这种复杂程度可能并不总是如此necessary@StackOverflowNewbie:第二次验证很麻烦。你如何区分a)旧电子邮件地址不再有效的合法用户(可能是域名注册失效,或者密码恢复不起作用)和b)试图劫持现有帐户的非法用户?如果您通过电子邮件向旧电子邮件地址发送验证链接,则合法用户将无法收到该电子邮件。如果您向新的电子邮件地址发送电子邮件,合法用户的帐户将被劫持。(安全问题旨在帮助解决此问题。)要更改用户的电子邮件地址,用户必须已登录系统。如果用户已登录系统,则假定该用户是合法的,并且应该能够更改其帐户电子邮件地址。向旧电子邮件地址发送电子邮件通知至少有助于防止潜在的劫持?