【问题标题】:What can I use instead of HTTP_REFERER for reliable tracking?我可以使用什么来代替 HTTP_REFERER 进行可靠的跟踪?
【发布时间】:2012-07-31 17:30:35
【问题描述】:

我正在编写一个脚本,它将每个访问者的引用 url 保存到会话变量中,然后将其与其他数据(例如将访问者带到网站的 google 关键字/短语)一起存储到数据库中,以及是否引用链接是常规的谷歌列表(又名有机结果)或付费链接(谷歌广告词)。 到目前为止,我已经想出了这个,但它并不总是有效。进行更多阅读后,我发现在几种情况下 http_referer 被阻止或隐藏,因此我正在寻找一种更好的方法来使其正常工作。

    $session = & JFactory::getSession();
    if (!$session->get('referrer', $origref, 'extref')) //If does not exist
    {
        $origref = $_SERVER['HTTP_REFERER'];
        $session->set('referrer', $origref, 'extref');

        $url = $session->get('referrer', $origref, 'extref');
        if(!$url && !$url = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : false) {
            $q = 'No referer';
        }

        $parts_url = parse_url($url);
        $query = isset($parts_url['query']) ? $parts_url['query'] : (isset($parts_url['fragment']) ? $parts_url['fragment'] : '');
        if(!$query) {
            $q = 'Not from Google';
        }
        parse_str($query, $parts_query);
        $q = isset($parts_query['q']) ? $parts_query['q'] : isset($parts_query['oq']) ? $parts_query['oq'] : (isset($parts_query['p']) ? $parts_query['p'] : 'could not fetch keyword');

      if(stristr($origref, 'aclk')) { // if referer is a google adwords link as opposed to an organic link
          $type = ', paid link, '.$_SERVER['HTTP_USER_AGENT'];
      } else {
          $type = ', organic result, '.$_SERVER['HTTP_USER_AGENT'];
      }

    $ginfo = $q.$type;
    $session->set('referrer', $ginfo, 'extref');  
    }

    function search_engine_query_string($url = false) {
        if(!$url && !$url = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : false) {
            return 'No referer';
        }

        $parts_url = parse_url($url);
        $query = isset($parts_url['query']) ? $parts_url['query'] : (isset($parts_url['fragment']) ? $parts_url['fragment'] : '');
        if(!$query) {
            return 'Not from Google';
        }
        parse_str($query, $parts_query);
        return isset($parts_query['q']) ? $parts_query['q'] : (isset($parts_query['p']) ? $parts_query['p'] : '');
    }

有什么想法吗?

【问题讨论】:

  • Referer: 是您将得到的最接近的。它绝不是可靠的,但它是所有 1 可用选项中最可靠的。
  • 没有“可靠的”追踪人员的方法。只有较少失败的方法

标签: php http-referer


【解决方案1】:

另一种典型的方法是为跟踪器身份设置一个专门的条目 url。例如:

subdomain.mysite.com/tracker?userid=12345&source=adwords

当该 url 被点击时,您就知道来源是 adwords,并且您会立即使用 header 重定向将用户重定向回主页。这样一来,他们对跟踪一无所知,而且应该非常可靠。

【讨论】:

    【解决方案2】:

    我可能是错的,但除非你控制两端(即引用者和被引用者),否则我认为这不可能超出你已经在做的事情。

    如果用于分析目的,您可以使用Google AnalyticsGoogle Webmaster Tools

    它们相互补充,并且非常希望你想用你的脚本来完成

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-09
      • 1970-01-01
      • 2019-03-07
      • 1970-01-01
      相关资源
      最近更新 更多