2009-06-30 120 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解碼是微不足道的。