【发布时间】:2010-10-06 11:46:48
【问题描述】:
我已经为此找遍了所有地方,但似乎无法得到完整的答案。因此,如果 stackoverflow 上已经存在答案,那么我提前道歉。
我想要一个唯一且随机的 ID,这样我网站上的用户就无法猜测下一个数字,而只是跳转到其他人的信息。我计划坚持主键的递增 ID,但还要在数据库中为该行存储一个随机且唯一的 ID(某种哈希)并在其上放置一个索引。
从我的搜索中,我意识到我想避免冲突,并且我已经阅读了一些关于 SHA1 的提及。
我的基本要求是
- 小于 GUID 的东西。 (在 URL 中看起来很糟糕)
- 必须是唯一的
- 避免碰撞
- 不是一长串不可读的奇怪字符。
我正在寻找的一个例子是 www.somesite.com/page.aspx?id=AF78FEB
我不确定我应该在数据库中(我使用的是 SQL Server 2005)还是在代码中(我使用的是 C# ASP.Net)来实现它
编辑:
从我所做的所有阅读中,我意识到这是通过默默无闻的安全性。我确实打算对这些页面进行适当的授权和身份验证。我将使用 .Net 的身份验证和授权框架。但是,一旦合法用户登录并访问一个合法(但动态创建的页面),其中包含指向属于他的项目的链接。例如,链接可能是 www.site.com/page.aspx?item_id=123。是什么阻止他点击该链接,然后将上面的 URL 更改为不属于他的 www.site.com/page.aspx?item_id=456?我知道一些 Java 技术,如 Struts(我有待更正)将所有内容存储在会话中并以某种方式从中解决,但我不知道这是如何完成的。
【问题讨论】:
-
将此类数值转换为较短文本值的 URL 友好编码是 base62,它是字母数字。不幸的是,实现也很少见。做对是很棘手的。相反,您可以查看 base64-url,这是一种对 URL 友好的 base64 变体,比 base62 更常见。