2012-04-25 47 views
1

在我的工作中,我經常需要弄清楚我們的流量來自哪裏。我們購買谷歌廣告,並通過網址中的查詢字符串來識別流量。 (mywebsite.com/?x="google_ad_group_4" )。找到引用頁面(php)

如果有$ _GET ['x'],那麼在每個頁面上我都會包含一些會話,將$ _SESSION ['x']設置爲$ _GET ['x']。如果沒有$ _GET [「X」]我通過一些其他的選擇,看看他們來自何處,並設置在$ _SESSION [「X」]:

$refurl = parse_url($_SERVER['HTTP_REFERER']); 
$query = $refurl['query']; 
parse_str($query, $result); 

if (isset($result['q'])&& strstr($_SERVER['HTTP_REFERER'],'google')) { 
    $_SESSION['x'] = 'G-'.str_replace('\\"',"X",$result['q']); 
}elseif (isset($result['p'])&& strstr($_SERVER['HTTP_REFERER'],'yahoo')) { 
    $_SESSION['x'] = 'Y-'.$result['p']; 

//took out bing, aol, ask etc in the name of brevity 

}else{ 
    if ($refurl['host']){ 
     $_SESSION['x'] = $_SESSION['x'].'_ref-'.$refurl['host']; 
    } 
} 

這樣我可以追加搜索查詢將用戶帶到該網站以及他們使用的搜索引擎。我記錄傳入的$ _SESSION ['x']的。

許多用戶使用$ _SESSION ['x']的「_ref-mywebsite.com」,這是沒有意義的,如果它們來自我自己的域名,他們已經有一個$ _SESSION ['x']設置在任何頁面上。這是因爲他們的瀏覽器安全性高嗎?

我錯過了一些明顯的東西嗎?有沒有更聰明的方法來做到這一點?

+0

我可以設置HTTP_REFERER任何東西(我剝奪它,每個請求),所以它沒有意義。 – 2012-04-25 23:41:10

回答

3

你可以得到引用這樣

echo $_SERVER['HTTP_REFERER']; 

但正如評論所說,它可以很容易被操縱。

+0

'HTTP_FERERER'應該是'HTTP_REFERER' :) – 2012-04-25 23:45:07

+0

@JTSmith。哎呀:)修正了它。謝謝 – Starx 2012-04-25 23:48:38

0

除非客戶端(瀏覽器)在標題中向您傳遞「HTTP_REFERER」,否則您將無法獲得它。這取決於他們來自的網站。

我不知道你的工作流程是什麼樣的,但你可以做的一件事就是用JavaScript獲取它並將它傳遞給你的PHP腳本。希望這可以幫助。

+0

不,它取決於瀏覽器,該值由瀏覽器而不是網站設置。 – 2012-04-25 23:59:16

+0

這是瀏覽器傳遞的值,但它完全可能設置自定義標題,特​​別是在PHP中。例如標題(「foo:bar」); – misakm 2012-04-26 18:22:58

0

我認爲,一個可能的方案是:

  • 一個新的訪問者來到與正常引用的網站;
  • 他關閉瀏覽器(這會清除他的會話cookie),並打開網站的標籤;
  • 使用舊選項卡中恢復的網站重新打開瀏覽器;
  • 單擊頁面上的任何鏈接並從具有來自同一域和清理會話的引用來到另一個頁面。