如何让PHP-GA停止增加谷歌分析中的实时访问者?

时间:2014-01-01 07:10:53

标签: php google-analytics

我正在使用php-ga(https://packagist.org/packages/unitedprototype/php-ga)向GA发送简单分析 - 基本上捕获API端点何时被击中。

我使用下面的代码并且它运行良好,但是GA将每个端点命中(通过刷新测试页面进行测试)作为唯一访问者。以前有人见过这个吗? API知道'谁'正在联系它,感谢身份验证。

有人能告诉我如何告诉GA每次刷新实际上是一次用户会话,而不是一次全新的访问吗?

use UnitedPrototype\GoogleAnalytics;


$ga = new GoogleAnalytics\Tracker('UA-12345678-1', 'mysite.com');
$visitor = new GoogleAnalytics\Visitor();
$visitor->setIpAddress($_SERVER['REMOTE_ADDR']);
$visitor->setUserAgent($_SERVER['HTTP_USER_AGENT']);

$session = new GoogleAnalytics\Session();

// Assemble Page information
$page = new GoogleAnalytics\Page('/api/v1/test-ga-thingy');
$page->setTitle('Testing the API Thingy');

// Track page view
$ga->trackPageview($page, $session, $visitor);

1 个答案:

答案 0 :(得分:1)

我有同样的问题,为了解决这个问题,你需要让PHP检查分析cookie是否已设置,如果是,那么它不应该创建一个新的,如果它不应该。 打开文件GoogleAnalytics/Session.php,然后转到第72行。在那里你会找到这个代码:

public function __construct() {
    $this->setSessionId($this->generateSessionId());
    $this->setTrackCount(0);
    $this->setStartTime(new DateTime());
}

创建一个新的Session实例后,它将通过这些行。但是在这里,它为每个实例提供了一个新生成的sessionid,为它提供了一个新的trackcount和一个新生成的startTime。那不是我们想要的,所以你需要改变它以查看是否已经有来自谷歌分析的任何cookie,如果有,它应该使用那些。将这些行更改为:

public function __construct() {
    if(!isset($_COOKIE['__utmb'])){
        $this->setSessionId($this->generateSessionId());
        $this->setTrackCount(0);
        $this->setStartTime(new DateTime());
    }else{
        $this->setSessionId(_COOKIE['__utmc']);
        $this->fromUtmb($_COOKIE['__utmb']);
    }
}

这解决了1个问题,但另外一个问题,每次创建“访客”类的新实例时都会遇到同样的问题。 打开文件GoogleAnalytics/Visitor.php,然后转到第150行。在那里你会找到这个代码:

public function __construct() {
    // ga.js sets all three timestamps to now for new visitors, so we do the same
    $now = new DateTime();
    $this->setFirstVisitTime($now);
    $this->setPreviousVisitTime($now);
    $this->setCurrentVisitTime($now);
    $this->setVisitCount(1);        
}

您需要将其更改为:

public function __construct() {
    // ga.js sets all three timestamps to now for new visitors, so we do the same
    if(isset($_COOKIE['__utma'])){
        $this->fromUtma($_COOKIE['__utma']);
    }else{
        $now = new DateTime();
        $this->setFirstVisitTime($now);
        $this->setPreviousVisitTime($now);
        $this->setCurrentVisitTime($now);
        $this->setVisitCount(1);
    }
}