新用户电子邮件验证码(最佳做法)

时间:2014-05-25 04:38:37

标签: mysql performance space-efficiency

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

  1. 存储激活密钥的时间是否超过需要的时间?截至目前,我已将其设置为在用户激活其帐户后删除密钥。
  2. 当我清除表格中的数据,发布激活后,空间是否被取消分配?还是刚刚清空?
  3. 有没有更好的方法来完成这个过程? (我有一个模糊的想法,即使用密钥和电子邮件ID作为列使用临时“令牌”表,每次注册时都会添加一个新行,然后在用户确认后删除(或者,在特定超时后删除)周期)
  4. 理想情况下,生成密钥的大小应该是多少?一个简单的5位字母数字代码可以容纳6000万+组合,所以有没有真正需要哈希呢?
  5. 我一直在研究这个问题,我的目标是使我的系统完全可扩展,并且尽可能高效。欢迎任何信息/讨论。

1 个答案:

答案 0 :(得分:2)

  1. 如果用户点击激活码并删除它,那么他会忘记点击它并再次点击它,当代码无法识别时,他可能会感到困惑。我会让激活码保持活动状态,直到它过期,这至少会与您的电子邮件中的说明相符。

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

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

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