我已经找遍了所有的地方,但我似乎找不到一个完整的答案.因此,如果stackoverflow上已经有了答案,那么我提前道歉.

我想要一个唯一且随机的ID,这样我网站上的用户就不会猜到下一个数字,而直接跳到其他人的信息.我计划坚持主键的递增ID,但也要在DB中存储该行的随机唯一ID(类似于散列),并在其上放置索引.

通过我的搜索,我意识到我想要避免碰撞,我读到了一些关于SHA1的提及.

我的基本要求是

  • 比GUID小的东西.(在URL中看起来很可怕)
  • 必须是唯一的
  • 避免碰撞
  • 不是一长串不可读的奇怪字符.

我正在寻找的一个示例是www.Somesite.com/page.aspx?id=AF78FEB

我不确定应该在数据库(我使用的是SQL Server 2005)还是代码(我使用的是C#ASP.Net)中实现这一点

编辑:

从我所有的阅读中,我意识到这是默默无闻中的安全.我确实打算获得访问这些页面的适当授权和认证.我会用的.Net的身份验证和授权框架.但一旦一个合法用户登录并访问一个legimate(但动态创建的页面),该页面上就充满了指向属于他的项目的链接.例如,一个链接可能是www.site.com/page.aspx?项目id=123.是什么阻止他点击那个链接,然后改变上面的URL进入www.site.com/page.aspx?第456项不属于他?我知道一些Java技术,比如Struts(我需要更正)在会话中存储所有内容,并以某种方式从中解决问题,但我不知道这是如何实现的.

推荐答案

[回应编辑]

if( !item456.BelongsTo(user123) )
{
  // Either show them one of their items or a show an error message.
}

Asp.net相关问答推荐

此版本的 SQL Server 不支持用户实例登录标志.连接将关闭

从 Request.Url.AbsolutePath 获取应用相对 url

在 appSettings 中存储字符串数组?

更改 GridView 中列的标题文本

带有 Web 套接字的 SignalR

是否可以使用 Membership API 更改用户名

在 C# 中以编程方式添加元标记

如何从以特定名称开头的 appsettings 键中获取所有值并将其传递给任何数组?

没有回发的按钮?

来自 IP 地址的经度和纬度值

显示单选按钮列表内联

Razor 主机工厂错误

嵌套剃刀模板中的@RenderSection

如何在 IIS 7.5 上使用 ASP.NET 表单身份验证保护静态文件?

如何在 ASP.NET 站点中添加 favicon.ico

对 ASP.NET 2.0 网页进行单元测试的最佳方法是什么?

通过 ASP.NET/C# 使用 Plupload

使用 ConfigurationManager.RefreshSection 重新加载配置而不重新启动应用程序

ASP.NET 核心,更改未经授权的默认重定向

IE9 JavaScript 错误:SCRIPT5007:无法获取属性ui的值:对象为空或未定义