PHP / MYSQL - 订阅电子邮件 - 他们如何完成这样的事情?

时间:2012-05-16 23:20:50

标签: php mysql confirmation-email

我希望网站的某个方面可以用来注册简报。

我不是100%完成这项任务的最佳方式。

我能想到的很简单:


一个带有提交按钮的输入,用户在那里输入他们的电子邮件地址。

生成一个随机的32个字符的哈希值,并将它们的地址与mysql表一起存储。

电子邮件被发送到包含哈希的地址,并要求用户在一个页面上输入他们的电子邮件地址和哈希值,并将其与mysql表进行核对。

如果正确,则通过在表格上定义附加条目来激活电子邮件。


就我对这两个人的了解而言,这就是我...

我想要完成的是,在确认中向用户发送一个链接,他们可以点击该链接确认他们的地址......类似http://www.mysite.com/users/newsletter/?user=aGuy&confirm=blahBlah

但是我真的不知道从哪里开始......就像我理解的那样,以这种方式允许mysql查询是不安全的......

有人能够向我提供有关此事的更多信息吗?

这是建议或链接到教程,可能涵盖这样的事情。

感谢您抽出宝贵时间阅读本文!!

2 个答案:

答案 0 :(得分:3)

你很亲密。

当用户提交其电子邮件地址时,请将其插入数据库。该表至少应包含4个字段(id,email,Verified,key)。 id只是一个代理键(自动增量)。 verified应默认为false,并且密钥不应该是散列,而是随机生成的字符串 - 任何难以猜测的内容。哈希是确定性的,因此如果有人想出你正在使用的算法,那么使用md5对用户的电子邮件地址进行哈希处理将不会成为一个好的密钥。随机元素更适合,但同样,任何难以猜测的东西都可以正常使用。

电子邮件应包含一个包含idkey的链接。您使用id在DB中查找记录(因为它是唯一的),然后检查URL中的key是否与数据库中存储的匹配(键不必是唯一的) )。如果匹配,请将verified设置为true,然后瞧。

对于奖励积分,您可以存储验证电子邮件发送的日期,并且您可以在24小时后删除未经验证的电子邮件。

答案 1 :(得分:1)

您对流程的描述很好,只需开始实施。

sfGuard包实现了类似的流程,检查它们的源代码和数据库设计。