我正在创建一个涉及用户注册的 PHP 网站,我想知道“电子邮件确认”代码的最佳实践。
新用户必须确认他们的电子邮件地址 - 我通过生成代码并将其通过电子邮件发送给用户来完成此操作,然后他可以使用它来激活他的帐户。我没有将此密钥存储在数据库中,而是使用了一个方便的小解决方法:代码是以下结果:
md5("xxxxxxxxx".$username."xxxxxxxxxxx".$timestamp."xxxxxxxxx");
其中 $timestamp 是指用户创建时间。总的来说,我对此感到非常满意,但后来我开始思考,这是否足够安全?那么碰撞的可能性呢?而且我还需要为密码重置等生成代码。如果我使用类似的方法,冲突可能会导致一个用户无意中重置另一个用户的密码。这不好。
那么你是怎么做这些事情的呢?我的想法是以下格式的表格:
codePK (int, a-I), userID (int), type (int), code (varchar 32), date (timestamp)
其中“类型”将是 1、2 或 3,表示“激活”、“电子邮件更改”或“密码重置”。这是一个好方法吗?你有更好的方法吗?
使用与上述类似的方法,我可以在不使用 cron-jobs 的情况下自动删除超过两天的任何内容吗?我的主机(nearlyfreespeech.net)不支持它们。如果可能的话,我想避免在外部主机上执行 cron-job,wget 是一个删除东西的脚本,因为那只是混乱 =P。
谢谢!
马拉
更新:
澄清一下:我已经意识到安全地完成这项任务的唯一方法是使用数据库,这是原始功能试图避免的。我的问题是应该如何构建表格(或表格?)。有人建议我取消 codePK,只将代码设为 PK。所以简而言之,我的问题是:这是你做的吗?