如何在URL而不是Integer中使用字母数字字符串作为id?

时间:2013-02-20 17:22:08

标签: php mysql url hash

我正在构建一个网站上有公共内容的网站,但我不希望用户通过更改直接在的行的id来猜测下一页的内容网址。

我发现here的方法是编码和解码十进制/基数36.但是这个方法的问题是id仍然很容易猜到,因为1将保持为1 ,13将是D等。

使用较长的哈希/字母数字字符串作为id的最佳做法和方法是什么?有点像Youtube网址,没有任何碰撞的可能性?

感谢您的帮助和建议,非常感谢。

3 个答案:

答案 0 :(得分:1)

您可以加密/解密您的ID而不是编码。但是,听起来您必须按顺序执行特定的步骤(页面)序列。

我认为更好的方法是建立一个业务类来确定用户是否真的被允许(还)看到所请求的页面。这样,您可以使用Url上的ID,但依赖您的代码来确定acccess。

答案 1 :(得分:1)

也许最好的想法是使用简单的非线性算法修改哈希值之前的数字。也许是这样的:

<?php

$id = ($_GET['id']*3)+2;

$id = base_convert($id, 10, 36);

然后解开,只需反转算法:

<?php

$id = dase_convert($id, 36, 10);

$id = ($id-2)/3;

答案 2 :(得分:0)

实施GUID作为您的身份。

GUID(全球唯一标识符)是128位值,因此如果您想要捕获某人的ID,您可以进行猜测。

有各种工具可以生成GUID,VS2010有一个实用程序可以将GUID打成纯文本,但我不知道如何从代码生成,因为我从来没有需要,只有一次性使用。

GUID非常适合身份。 :)