我创建一个PHP的网站,该网站包括用户注册,和我想知道的“确认电子邮件”代码的最佳做法。通过生成代码,并在一封电子邮件中,他可以再使用,以激活其账户将其发送到用户我做到这一点 -最佳做法电子邮件确认代码
新用户必须确认他们的电子邮件地址。而不是存储在数据库中这一关键,我使用一个方便的小解决办法:代码的结果是:
md5("xxxxxxxxx".$username."xxxxxxxxxxx".$timestamp."xxxxxxxxx");
其中$时间戳是指用户创建时间。总的来说,我对此很满意,但后来我开始想,这足够安全吗?那碰撞的可能性呢?我还需要生成密码重置代码等。如果我使用了类似的方法,碰撞可能会导致一个用户无意中重置另一个用户的密码。这并不好。
那么,你如何做这些事情?我的想法是以下格式的表:
codePK (int, a-I), userID (int), type (int), code (varchar 32), date (timestamp)
其中“类型”是1,2或3,意思是“激活”,“电子邮件变”或“密码重置”。这是做这件事的好方法吗?你有更好的方法吗?
使用类似上述的方法,可能我会自动删除任何超过两天老不使用的cron的作业?我的主机(almostfreespeech.net)不支持它们。如果可能的话,我想避免在外部主机上执行cron-job,而wget是一个删除内容的脚本,因为这只是messy = P。
谢谢!
麻辣
更新:
为了澄清:我已经意识到可靠而安全地去了解这个任务的唯一方法是使用一个数据库,这是原函数试图避免。我的问题是如何构建表(或多个表)。有人建议我不要使用codePK,只需将代码设为PK即可。所以总之,我的问题是:这是你做的?
电子邮件确认代码的最佳做法?让他们离开... – Leo 2010-01-09 13:52:20
用户在文件上有一个有效的电子邮件地址是很重要的,如果仅用于密码重置。虽然人们可以声称“这是用户的责任”,但这是我们正在处理的真实世界......只要第一个“永远不会忘记密码”的人忘记密码,大概一到两周后,我的系统将是“最愚蠢的”。 – Mala 2010-01-10 12:49:30