5

我一直在研究最佳做法是对尝试在网站上注册的用户进行电子邮件验证。(我正在运行 laravel 安装,这发生在 php 中,尽管这更像是一个理论问题)。我有几个问题想听听大家的意见!

  1. 将激活密钥存储得比需要的时间长有什么用吗?到目前为止,我已将其设置为在用户激活他/她的帐户后删除密钥。
  2. 当我在激活后清除表中的数据时,空间是否会被取消分配?还是只是清空了?
  3. 有没有更好的方法来完成这个过程?(我有一个模糊的想法,即使用一个临时的“令牌”表,其中键和电子邮件 ID 作为列,每次注册时都会添加一个新行,然后在用户确认后将其删除(或者,在特定超时后时期)
  4. 理想情况下,生成的密钥的大小应该是多少?一个简单的 5 位字母数字代码可以容纳 6000 万多个组合,那么真的需要散列吗?

我已经对此进行了一段时间的研究,我的目标是使我的系统完全可扩展并尽可能高效。欢迎任何信息/讨论。

4

1 回答 1

3
  1. 如果用户点击了激活码,而你删除了它,那么他就忘记了他点击了它,然后再次点击它,他可能会因为无法识别代码而感到困惑。我会让激活码保持有效直到它过期,这至少与您的电子邮件中应该包含的解释相匹配。

  2. 从 MySQL 表中删除数据(假设为 InnoDB)将空间标记为准备删除。后来,后台线程真正将其删除,并且可以重新使用该空间。但是与任何碎片化过程一样,对于大多数未来的行来说,空间可能太窄了。最终,如果您运行 OPTIMIZE TABLE,该表将被复制过来,这自然会对其进行碎片整理。

  3. 是的,生成与电子邮件关联的唯一密钥。让它在相当短的时间内到期,也许是 1 小时。

  4. 我会使用UUID()。用户应单击您的应用发送给他们的电子邮件中的链接——用户不必输入令牌。因此,如果它很长,它不是负担。UUID() 是生成强唯一随机令牌的好方法。

于 2014-05-25T05:27:24.917 回答