GUID(全局唯一标识符)是否适用于网站图像文件名?

11
我正在与我的一位程序员同事(PHP)对GUID进行辩论。假设每个图像的信息都存储在数据库中,并且具有自己的主键(int)。

除了不必担心重复文件名之外,使用唯一ID作为图像文件名还有哪些原因?

我不想忽视他的方法,但我也不感到满意。

谢谢! Ben

更新: 听到很多人赞成GUID,那么“随机”生成的图像文件名可能如何影响SEO?(感谢Sukumar)


关于SEO,请见http://www.seroundtable.com/archives/007366.html在这种情况下,我不认为主键与GUID有任何区别。 - Sukumar
4个回答

15

除了不必担心文件名重复外,使用唯一ID作为图像文件名的原因是什么?

使用自增主键作为文件名将使得猜测其他图片的URL变得可能,这可能不是你想要的 - 根据你的系统工作方式,用户可以访问未经发布(但存在于服务器上)的图片。

我认为使用唯一ID是个不错的主意。


这里的10秒很重要,+1。 - zerkms
哇,那是非常快速和简洁的回复,谢谢!安全性胜过轻微的数据库膨胀,每一次都如此。 - Ben

5

使用GUID作为文件名的优点

  • 获得不可预测的文件名。
  • 可扩展的命名(当数据库分片时无需担心重命名文件)。

使用GUID作为文件名的缺点

  • 需要在数据库中存储额外的数据。

使用数据库主键作为文件名的优点

  • 通过减少需要额外列的需求来节省存储空间。

使用数据库主键作为文件名的缺点

  • 创建可预测的文件名,允许用户“猜测”。

总结: 这是一个你需要根据你的需求考虑的折衷方案。然而,更倾向于选择GUID。


谢谢Sukumar,列表非常清晰。GUID比我之前认为的更加强大。将SEO考虑作为一个单独的问题是否更好? - Ben
SEO的考虑或许可以作为答案的一个附加点。您可以进一步澄清您的问题并改善这个答案,使其更加完整。 - Sukumar

2

UUID 在需要具有不可预测文件名的情况下非常有用,这样没有人可以在没有正确的 URL 的情况下下载所有文件。


这并不完全正确:https://dev59.com/glLTa4cB1Zd3GeqPeOC7 - OverZealous
@OverZealous:哦,我的错。不知道这一点。所以对于99%的人来说是不可预测的)) 顺便问一下,有证据表明GUID实际上是可预测的吗? - zerkms
抱歉,我重新写了我的评论。我并不是要表现得那么严厉! - OverZealous
@OverZealous:一点也不。我承认我不知道很多东西,成为更聪明的人是我来这里的目的;-) - zerkms
根据维基百科的说法,“对WinAPI GUID生成器的密码分析表明,由于V4 GUID序列是伪随机的,完全了解内部状态后,可以预测先前和随后的值”。因此,也许仅仅适合小规模公司/项目是不够的。 - zerkms
显示剩余2条评论

0

如果您使用主键将其存储在数据库中,我建议将其用作唯一标识符(因此文件名)。在数据库中有两个唯一列标识一个资源并没有太多意义。顺便说一下,我不会为此主键使用自动递增字段。这样很容易猜测其他可能不需要的图像ID。

我认为选择两者之间是品味问题。我们都使用。文件名是最常用的,但是您必须拥有查看文件的权限。我们还使用唯一ID,但这是为了避免权限检查并使某人能够向非用户共享图像。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接