【发布时间】:2011-03-24 19:16:17
【问题描述】:
我希望我的用户在能够登录之前激活他们的帐户。注册后他们会收到一封包含激活链接的电子邮件,如下所示:
http://www.blabla.com/activate.php?email=blabla@blabla.com&token=Aisd23uNMAu53932asdDasd82AS
当然,每当有人登录时,我都必须检查该用户是否激活了他/她的帐户。我可以想到 2 种方法来解决这个问题,要么在我的“用户”表中有一个额外的列,当用户像这样激活时,它被设置为空:
-----------------------------------------------
| id | username | password | activation_token |
-----------------------------------------------
| 1 | user1 | blabla | |
-----------------------------------------------
| 2 | user1 | blabla | asd232DA34qADJs2 |
-----------------------------------------------
然后,每当用户登录时,我都会提取activation_token 以及用户信息。或者我可以有一个单独的表,其中仅包含激活令牌,然后在每次用户登录时加入“用户”表:
--------------------------------------
| id | account_id | activation_token |
--------------------------------------
| 1 | 37 | dsad2428491dka98 |
--------------------------------------
| 2 | 2 | asd232DA34qADJs2 |
--------------------------------------
那么哪一个最有效?感谢您的宝贵时间。
编辑:感谢所有精彩的回复
【问题讨论】:
-
我想说,随便挑一个就行了。标准化版本会更容易实现。
-
规范化表将为您节省一些数据库空间,但代价是更复杂的 SQL 查询。这两种解决方案都有效,所以只需选择一个。
-
正如其他人所说,因为在大多数情况下,对于任何帐户,此激活只会发生一次,因此速度可以忽略不计。
-
如果您使用第二种变体,您可以为验证类型添加另一列,并将其用于需要用户验证的各种类型的操作(初始激活、密码更改等) .).
-
我使用第二个,一旦用户激活他们的帐户并节省空间,我就可以删除激活密钥。
标签: php mysql activation