2011-04-13 27 views
12

我有一個記錄用戶訪問的應用程序。這些訪問中沒有一個訪問是直接訪問的,100%的訪問是從另一個站點引用的。HTTP引用不總是通過

我將$_SERVER['HTTP_REFERER']傳遞給數據庫。大約35%的記錄主題通過了引用者,其餘都是空白的。

這是有原因嗎?

+0

'HTTP_REFERER'是瀏覽器發送的環境變量。某些瀏覽器可以讓用戶在發出http請求時將其刪除。這不是一個PHP問題或根本問題。 – Khez 2011-04-13 02:33:43

+1

'Referer:'不是一個強制性的HTTP頭。它的存在取決於瀏覽器設置(或代理)並且出於隱私原因通常被禁用。 – mario 2011-04-13 02:35:34

+0

我禁用了我的。 – Andre 2011-04-13 02:36:58

回答

9

如果用戶直接訪問您的網站,則不存在引薦來源。也有可能他們已經設置好了,所以他們的瀏覽器永遠不會發送推薦人。

根據this answer,瀏覽器不需要在進行元刷新時必須發送引薦者。

+0

我在上面提到過,大多數用戶可能不夠科技,無法改變他們的瀏覽器設置以禁用被傳遞的引用者。我知道我會做出一個假設,說少於1%的用戶這樣做。不過,我認爲這是一個好的假設和保守的估計。 – reefine 2011-04-13 02:39:54

+0

好吧,你問是怎麼可能的,而不是可能的。如果你只是想用你的假設,爲什麼還要問呢? – 2011-04-13 02:41:07

+0

@user您無法找到問題,因爲他們無法直接訪問您的網站。我認爲比「不到1%的用戶」更多地屬於這一類別。 – 2011-04-13 02:43:36

2

瀏覽器有時將在請求中包含referer。但這不是強制性的(referer是100%自願的)。事實上,圍繞referer存在各種隱私和安全問題(例如,如果HTTPS站點將您引向HTTP站點,則瀏覽器不應將引用站點包含爲referer)。所以不要依賴它。

0
  1. 到您的網頁直接訪問
  2. 瀏覽器設置(禁用引用或空)
  3. (在地址欄或書籤,歷史記錄等輸入URL)如果有人請求頁面內容與file_get_contents()功能...
16

HTTP_REFERER可能爲空,有幾個原因。

  1. 你必須明白它是由瀏覽器給出的環境變量。如果用戶願意的話,用戶可以刪除它甚至修改它。
  2. 從書籤,歷史記錄或通過手動輸入鏈接訪問鏈接的用戶沒有引用者。
  3. IE也被稱爲在圍繞javascript的情況下移除引用者。如window.open,window.location甚至設定target="_blank"爲錨或meta refresh
  4. 單擊聊天應用程序中的嵌入式鏈接,PDF/Word/Excel文檔,也不會設置引用者。
  5. 使用AJAX,file_get_contents,fopen和其他語言中的其他類似功能可能不會設置引用請求。
  6. cURL,fsockopen,具有類似瀏覽器組件的應用程序可能不會設置引用者。

當可能發生這種情況時可能會有更多的情況,如果我能想到任何看似合理的事情,我會更新。

+0

在這種情況下,可以保留這個信息的網站上提到的任何替代方法?我的意思是用戶的信息在A站點上 – 1myb 2013-10-18 03:23:38

1

在Internet Explorer 4.0及更高版本中從一個文檔鏈接到另一個文檔時,如果鏈接是從HTTPS頁面到非HTTPS頁面,則不會發送Referer標頭。當鏈接是從非HTTP(S)協議(如file://)到另一個頁面時,Referer頭也不會被髮送。欲瞭解更多信息,請訪問此處link

0

當您發現爲什麼丟失它時很常見: - 有時候您的引用者是https,並且您在http上,它將會丟失。

否則: - 用戶通過直接輸入url訪問。 - 用戶已添加書籤並來自書籤。 - 有時用戶將瀏覽器的URL保留爲默認值(類似書籤) - 代理瀏覽可能會刪除引用者。 - 以漫遊訪問網站(搜索引擎)