0

我有一个站点,用户必须使用典型的电子邮件确认脚本来确认他们的电子邮件,该脚本为每个用户提供包含通常哈希参数的特定(但很长)确认链接。

我遇到的问题是,由于他们使用的设备,一些用户遇到了冗长而复杂的确认链接问题。

因此,我需要创建一种替代方法来为每个用户生成唯一的确认链接,这样就没有明显的模式,这样就不会被发现和滥用。

我一直在研究 Base62 编码和解码,但我发现的是仅基于数字的,这将限制我使用顺序唯一用户 ID,然后在编码结果中创建一个明显的顺序模式,很容易被滥用.

最好,我想要一个不需要我更改数据库的解决方案。

理想情况下,我想基本上创建一个缩短的 URL,类似于 Bit.ly 和其他 url 缩短器创建其唯一 URL 的方式,但可以根据用户 ID、用户名或电子邮件对其进行编码和解码,最好有编码/解码使用唯一键“加盐”,因此编码结果中不会出现任何模式。

例子:

因此,而不是确认链接看起来像:

http://domain.com/confirm?email=blah@blah.com&hash=1f3870be274f6c49b3e31a0c6728957f

我希望它看起来像:

http://domain.com/confirm/Sg5rdn

然后我会简单地解码 Sg5rdn 以获取用户的用户名、用户 ID 或电子邮件并确认它们。

这甚至可能吗?

4

3 回答 3

1

我建议您将代码存储在用户表的列中:示例表非常缩短:

id--user---email--------------key-----confirmed----other stuff
1   bob    bob@example.com    1h323f   1            ...
2   rob    rob@example.com    18gg3f   0            ...
3   steve  steve@example.com  a862gf   1            ...
4   tom    tom@example.com    17g23f   0            ...

当用户注册一个帐户时,预先创建密钥并将其与用户名等一起存储

然后,当单击链接时,检查电子邮件中的密钥,然后将确认更新为 1。您可以在链接上使用 .htaccess 以使其更短:

RewriteRule ^confirm/(.*)/([a-zA-Z0-9]+)$ confirm.php?email=$1&hash=$2 [L]

例如:http://domain.com/confirm/tom@example.com/17g23f

希望这可以帮助

于 2011-09-05T15:31:26.050 回答
1

相反,只需创建一个带有确认码的表格。当用户应该进行确认时,创建一个唯一代码(使用 base62 或其他),将其插入该表并将其分配给用户 ID。

然后,当用户点击确认链接时,只需从确认代码表中获取用户 ID 等(并检查代码是否存在但仍未确认等)。

于 2011-09-05T15:20:42.290 回答
0

恐怕你的期望有点夸大了。
你唯一能做的就是稍微缩短哈希值。

从 Sg5rdn 中“解码”用户名、用户 ID 和电子邮件的唯一方法是从数据库中获取它们。

于 2011-09-05T15:18:54.203 回答