2009-06-30 49 views
2

我希望能够产生这样的URL变量:如何生成与db记录匹配的唯一URL变量?

http://example.com/195yq 
http://example.com/195yp 
http://example.com/195yg 
http://example.com/195yf 

的变量将匹配一个MySQL记录集,这样我可以拉出来。在创建该记录集时,我希望为其创建此密钥。

我该怎么做?做这个的最好方式是什么?有没有我可以使用的现有类?

感谢所有

+0

你说:“在创建该记录集时,我希望为它创建此密钥。”你真的想在哪里创建这个网址?数据库或更高层? – alphadogg 2009-06-30 20:29:47

回答

0

基本上,你需要某种散列函数。

这可以是SHA-1功能,MD5功能(如altCogito)或使用记录中的其他数据并对其进行编码。

您认为您会拥有多少条记录?选择解决方案时要小心,因为散列函数必须足够大才能覆盖你,但是太大而且你创建的数据库比你需要的大。我已经使用SHA-1并根据需要截断为64或32位。

另外,看看REST。考虑到网址可能不必如此神秘...

0

这可以通过两种方式来完成非常简单:

  • 使用散列,如MD5。 (将是长期的)
  • Base-64编码特定的ID或数据块

如果你询问是否有任何事情已经这样做与MySQL记录的,我不知道,你”我们会发现设计方面的东西,即使在像Grails这样的框架中,数据确实在概念上远离您网站中的网址。大多数甚至不尝试将前端和数据访问功能合并为一个整体。

+0

Base-64本身就很长。 4个字符变成8,对不对? – Abs 2009-06-30 19:54:07

+0

真实,非常真实:) – cgp 2009-06-30 20:10:20

0

在什么情况下你会使用它?为什么不通过post变量?它更安全和整洁。您仍然可以完成url中的数字,例如id = 195yq,并且可以通过配置您的php.ini文件来隐藏它们。

我希望这可以对你有所帮助。

请记住这一点。当您在地址栏中传递变量时,有人很容易更改变量,并访问您可能不希望他们访问的信息。

+0

任何人都可以使用这些URL来查找我网站上的特定页面。将会有许多页面和内容将由用户生成。它需要尽可能短。 – Abs 2009-06-30 19:55:30

+0

我明白了。对不起,我帮不了你。祝你好运,这对我也是非常有帮助的,所以我会一直关注。 +1一个很好的问题! – 2009-06-30 20:06:10

0

在你给出的例子中,它看起来像是base-64编码的数字主键。这就是我过去如此做的事情,但是我不确定这比将ID传给明确的人更好,因为base-64解码是微不足道的。