2012-02-24 31 views
2

我想隱藏來自URL的參數。我使用的是uuids而不是ID,當我在URL中傳遞它時,它看起來有點長和難看。首先想到的是使用帶有隱藏輸入的小表單而不是錨點,但將每一個錨點替換爲形式將會很不舒服,而且當錨點已經以另一種形式放置時,它也不起作用。通過將GET參數重寫爲POST並重定向一個好主意來隱藏GET參數?

因此,第二個想法是將$_GET重寫爲$_POST/$_SESSION,然後再次重定向到此腳本。所有變量都將可用,並且URL將變得乾淨而簡短。

但是,這種解決方案的性能呢?這樣做是個好主意嗎?

任何幫助或其他想法將不勝感激。提前致謝。

PS。

+1

如果你只是關心url的「美」,把你的應用程序放在一個框架中。這也有助於防止用戶使用GET參數爲URL添加書籤 – 2012-02-24 08:27:43

+0

UID在表單中很好,但是您希望將它們從頁面傳遞到頁面嗎?如果是這樣,他們需要進入超鏈接,所以你需要不時地把它們放入GET字符串中 - 除非你使用類似回傳(imo是笨重的)。你能把這個東西放在會話中嗎? (當我們不知道它是什麼或它是什麼時,很難知道該建議做什麼)。 – halfer 2012-02-24 08:29:25

+1

@Eugen請不要將時間歸還給Web 0.8。幀是反模式。理解HTTP並明智地使用它,不要試圖解決它。 – deceze 2012-02-24 08:29:51

回答

3

不要更改GET POST或反之亦然漂亮。在許多情況下,這兩種HTTP方法的處理方式都非常不同,並且您不希望導致這些副作用。

POST請求不能自包含在URL中,即嘗試將某個鏈接發送給需要POST請求的站點。 POST請求使用瀏覽器歷史記錄,即嘗試點擊返回按鈕返回通過POST提交的頁面。 POST請求不會被搜索引擎索引。

POST請求應該用於修改服務器上的數據。不要將它們用於所有常規請求。

如果您需要更漂亮的網址,請查找其他方式來引用您的記錄。或者只是停止關心它,這真的不是重要。

+0

這聽起來很合理,特別是因爲我會向用戶發送帶有URL的郵件。我的解決方案也回到按鈕問題聽起來不好。我認爲這是最好的回答:) – zelazowy 2012-02-24 08:37:45

0

如果你採用這種策略,你當然會在整個網站的寬度上釋放所有搜索引擎的好處。當您提交需要保存到存儲介質(或發送安全數據https等的數據)的數據時,您應該只使用,否則對於「請求」數據的建議是$_GET。因此,您需要在這裏確定用例並遵循該模式。

我瞭解您對'醜陋'網址的評論,但會建議您在尋找補救措施時謹慎行事。一種方法當然是在傳入的參數上做一個urlrewrite,但是這需要數據庫查找等等(以獲得映射的漂亮的url字符串),因此可能是昂貴的。

我會在發生任何其他想法時回來。

+0

搜索引擎並不那麼重要,但你和@deceze是對的,讓GET做它的工作併發布它。 – zelazowy 2012-02-24 08:39:37