唯一的数据库URL密钥,而不是id
我有一个web应用程序,用户可以登录并阅读他们的消息。我曾经使用数据库中的ID主键通过网站(如(viewmessage/3)访问和处理用户消息,但我很快意识到我不想这样做,因为它向所有用户提供了关于数据库中存储了多少潜在消息的信息。和用户的想法一样,查看一个我用来使用他们ID的用户配置文件,但这会给出网站上有多少用户。。。 所以我所做的是在每个表中添加一个名为UrlKey的新列,这个键是一个varchar(16),它由16个唯一的随机生成的数字组成,我使用这些数字映射到服务器端的ID 我现在的问题是,16太多了还是常见的做法(16^10),我应该只使用整数还是混合使用整数和ascii字符,在速度、安全性等方面有什么指导原则和建议吗。。。?唯一的数据库URL密钥,而不是id,url,key,Url,Key,我有一个web应用程序,用户可以登录并阅读他们的消息。我曾经使用数据库中的ID主键通过网站(如(viewmessage/3)访问和处理用户消息,但我很快意识到我不想这样做,因为它向所有用户提供了关于数据库中存储了多少潜在消息的信息。和用户的想法一样,查看一个我用来使用他们ID的用户配置文件,但这会给出网站上有多少用户。。。 所以我所做的是在每个表中添加一个名为UrlKey的新列,这个键是一个varchar(16),它由16个唯一的随机生成的数字组成,我使用这些数字映射到服务器端的ID 我现在的问
非常感谢16^10是一个巨大的数字,超过1万亿条信息 如果您使用大小写混合的字母和数字,那么您可以使用62个字符,而5个字符已经有62^5个组合,这几乎是10亿个组合。大多数数据库使用或来表示唯一的字符串,而不是自动递增的id。它们都可以存储为16字节128个整数,但长度为32个字符
我会使用GUID或UUID。那你就永远是独一无二的。我最初使用的是混音,但后来我想,如果代码被注入,可能会带来安全问题。我不太清楚,所以决定安全起见,只允许数字。我想在我的url中使用这个“GUID”来访问特定区域,事实上它是32个字符。。。。会成为一个问题吗?你让我意识到我的系统不可扩展。我有一个循环,如果当前键已经存在,它会生成一个随机键,所以如果我的记录过大,我可能会在这个循环中停留很长时间。@user391986我不知道32个字符是怎么一个问题。既然已经为您完成了,为什么还要滚动您自己的唯一标识符呢。每个主要平台都有一个生成GUID或UUID的方法。