2011-04-06 47 views
0

我有一個PHP登錄腳本,我將客戶端重定向到。當客戶端登錄時,我想將用戶返回到將他重定向到登錄頁面的頁面。重定向引用標頭

我想保持網址儘可能乾淨(最好只是/ login),而且我不想使用cookie,就像會話cookie一樣。

我試圖依賴$_SERVER['HTTP_REFERRER'],但我遇到了一個問題,當我點擊一個需要登錄的鏈接時,$_SERVER['HTTP_REFERRER']被設置爲點擊鏈接的頁面,而不是發送該鏈接的目標頁面302重定向。 (FF4)

如果沒有設置$_SERVER['HTTP_REFERRER'](HTTPS,書籤或其他),然後我凌亂了返回URL(/登錄/返回/ myurl)的取得網址。對於所有其他情況(瀏覽器在重定向到/ login的請求上提供HTTP_REFERRER),我真的只想依靠$_SERVER['HTTP_HEADER']生成一個乾淨的URL。

有沒有什麼辦法可以禮貌地要求瀏覽器使用重定向頭髮送'正確的'引用鏈接,或者我堅持堵塞所有重定向的URL?

+0

不要依賴'HTTP_REFERER'。 – fabrik 2011-04-06 09:20:17

回答

2

不,沒有辦法向瀏覽器詢問任何引用相關的東西。

如果我是你,我不會在任何地方重定向任何人,只是在適當位置顯示登錄表單(在模板驅動的網站上它非常容易),將當前位置存儲在隱藏字段中。

+0

這不會污染登錄框的搜索引擎結果嗎? – 2011-04-06 12:18:22

+0

@Jon搜索引擎?糾正我,如果我錯了:在你當前的情況下,一個搜索引擎被重定向到登錄頁面,並面對同一個登錄框,你沒有看到任何錯誤[顯然]。什麼是錯誤的相同的登錄框,但沒有重定向? – 2011-04-06 12:22:44

+0

在我看來,你會有10頁與excact相同的內容 - 10個索引點擊,而不是10個頁面指向一個頁面 - E.G索引中的一頁?或者我錯了嗎? – 2011-04-06 12:25:24

0

您無法指定在Referer標頭中發送的URL。你有三個選擇。

  • 將URL存儲在會話中。
  • 將URL存儲在cookie中。
  • 將URL存儲在請求參數中。

請求參數是最合適的,因爲用戶可能有多個窗口打開(共享會話和cookie),您可以輕鬆區分它們。

+0

沒有更好的適合的重定向代碼,以便客戶端發送實際引用者的HTTP_REFERRER? – 2011-04-06 09:32:52

+0

我知道沒有要求這種行爲的規範。還要小心拼寫錯誤:存儲引用鏈接的頭文件被稱爲'Referer',並使用$ _SERVER ['HTTP_REFERER']進行訪問。 – Oswald 2011-04-06 09:40:43