2012-04-25 60 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),并打开网站的标签;
  • 使用旧选项卡中恢复的网站重新打开浏览器;
  • 单击页面上的任何链接并从具有来自同一域和清理会话的引用来到另一个页面。