2010-02-08 44 views
3

有沒有一種方法來詢問確定導航方法的請求?地址欄輸入與鏈接

(使用LAMP配置,PHP)

換句話說......我想知道該條目是否被手輸入到地址欄,或使用了鏈接/書籤。

回答

3

您可以檢查$_SERVER['HTTP_REFERER']變量,該變量將包含該人員從其導航的網址。我不確定如果他們選擇書籤或手動輸入URL會發生什麼情況,但我懷疑這個變量是空白的。

雖然,因爲它說在the manual

頁面的地址(如果有的話),其被稱爲用戶代理到當前頁面。這由用戶代理設置。並非所有的用戶代理都會設置它,有些提供了將HTTP_REFERER修改爲功能的功能。總之,它不能真正被信任。

2

可靠的是,你不能。

您可以嘗試的一種方法是引用標頭(它是如何拼寫在規範中的),通常由瀏覽器發送以指示用戶來自哪裏。在PHP中,這在$_SERVER['HTTP_REFERER']中可用。

大多數現代瀏覽器(我已經測試谷歌Chrome和火狐)發送直接入口上的連結點擊一個參照標頭和 - 也就是說,如果用戶的設置說,他們通常默認做。

另一種選擇,根據您真正關心的程度,將一些隨機生成的會話變量添加到鏈接中的URL中,並在收到請求時查看URL中的令牌是否與令牌在用戶的會話中。如果是這樣,那麼你去。如果沒有,這個鏈接被複制粘貼。

當然,所有這些方法都很容易被毆打,並且您的服務器可能被愚弄。不要依賴他們。

+0

對。很棒的信息。它實際上是爲了演示和認證目的。 – eleete 2010-02-08 23:13:32

+1

如果您確實想要進行身份驗證,然後在某種程度上加以保護,則您需要在URL中附加一些祕密的每用戶密鑰。這是唯一的100%可靠的方法。 – Matchu 2010-02-08 23:18:00

+0

+1,唯一確定的方法是使用某種不斷變化的密鑰(可能存儲在會話中)來驗證鏈接是否被點擊。每次查看頁面時都應該重新生成密鑰,但只要簡短地記下時間+用戶的IP即可。 – Dereleased 2010-02-09 00:14:39

0

如果他們點擊一個鏈接,瀏覽器會設置一個引用,您可以通過使用

$_SERVER['HTTP_REFERER'] 

,並檢查是否已設置檢測網址標頭的存在。如果它是空白的,則該人在URL中鍵入或具有瀏覽器擴展以清除引用者。這與你在這個問題上得到解決方案差不多。

0

關於所有你能做的就是看看$SERVER['HTTP_REFERER'] [原文如此]。如果您直接關聯,那麼很可能會找到與您關聯的網頁的網址。有許多情況下你不會得到它,所以你不能依賴它。

在IE中,如果您以前使用saveFavorite行爲在用戶爲您加書籤之前保留了某些數據,則可以檢測到您從書籤加載的時間。但這很醜陋。

+0

在所有的電子郵件客戶端的電子郵件鏈接上工作嗎?或者至少Thunderbird,Outlook,Eudora? – eleete 2010-02-08 23:14:54

+0

可能不會,因爲郵件客戶端並不完全有一個URL放入引用者。 – Matchu 2010-02-08 23:17:22

+0

不可以。但是,當您發送郵件時,通常在URL中包含一個'?parameter = something'部分來表示鏈接來自電子郵件。 – bobince 2010-02-08 23:51:08