Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
唯一的数据库URL密钥,而不是id_Url_Key - Fatal编程技术网

唯一的数据库URL密钥,而不是id

唯一的数据库URL密钥,而不是id,url,key,Url,Key,我有一个web应用程序,用户可以登录并阅读他们的消息。我曾经使用数据库中的ID主键通过网站(如(viewmessage/3)访问和处理用户消息,但我很快意识到我不想这样做,因为它向所有用户提供了关于数据库中存储了多少潜在消息的信息。和用户的想法一样,查看一个我用来使用他们ID的用户配置文件,但这会给出网站上有多少用户。。。 所以我所做的是在每个表中添加一个名为UrlKey的新列,这个键是一个varchar(16),它由16个唯一的随机生成的数字组成,我使用这些数字映射到服务器端的ID 我现在的问

我有一个web应用程序,用户可以登录并阅读他们的消息。我曾经使用数据库中的ID主键通过网站(如(viewmessage/3)访问和处理用户消息,但我很快意识到我不想这样做,因为它向所有用户提供了关于数据库中存储了多少潜在消息的信息。和用户的想法一样,查看一个我用来使用他们ID的用户配置文件,但这会给出网站上有多少用户。。。 所以我所做的是在每个表中添加一个名为UrlKey的新列,这个键是一个varchar(16),它由16个唯一的随机生成的数字组成,我使用这些数字映射到服务器端的ID

我现在的问题是,16太多了还是常见的做法(16^10),我应该只使用整数还是混合使用整数和ascii字符,在速度、安全性等方面有什么指导原则和建议吗。。。?
非常感谢

16^10是一个巨大的数字,超过1万亿条信息

如果您使用大小写混合的字母和数字,那么您可以使用62个字符,而5个字符已经有62^5个组合,这几乎是10亿个组合。

大多数数据库使用或来表示唯一的字符串,而不是自动递增的id。它们都可以存储为16字节128个整数,但长度为32个字符


我会使用GUID或UUID。那你就永远是独一无二的。

我最初使用的是混音,但后来我想,如果代码被注入,可能会带来安全问题。我不太清楚,所以决定安全起见,只允许数字。我想在我的url中使用这个“GUID”来访问特定区域,事实上它是32个字符。。。。会成为一个问题吗?你让我意识到我的系统不可扩展。我有一个循环,如果当前键已经存在,它会生成一个随机键,所以如果我的记录过大,我可能会在这个循环中停留很长时间。@user391986我不知道32个字符是怎么一个问题。既然已经为您完成了,为什么还要滚动您自己的唯一标识符呢。每个主要平台都有一个生成GUID或UUID的方法。