Piwik:如何跨域追踪访问者(用户ID)(PHP/JS)?

5
我希望能够将当前访客的IP地址通过PHP与指定的用户ID相连接,使得Piwik可以在多个(子)域名中进行追踪。其中,有多个(子)域名,我想要给予一个登录于secure.example.com的访客(IP)一个独特的用户ID来在所有其他域名上进行追踪。通过PHP(Piwik追踪PHP客户端 -> setUserId),在登录时建立“IP -> UserID”的链接。在所有域名(包括登陆后的secure.example.com)上,“正常页面”追踪应该基于JavaScript(Piwik JS追踪片段)。例如:
  • www.example.com(siteId 1)
  • support.example.com(siteId 2)
  • secure.example.com(siteId 3)
  • www.anotherexample.com(siteId 4)
我的目前的PHP登录跟踪代码(在secure.example.com/login上调用):
<?php
require_once 'PiwikTracker.php';

$siteId = 3;
$apiUrl = 'http://piwik.example.com/';
$userId = '[TESTUSER]';

$piwik = new PiwikTracker($siteId, $apiUrl);
$piwik->enableCookies('*.example.com');
$piwik->setIp($_SERVER['REMOTE_ADDR']);
$piwik->setUserId($userId);
$piwik->doTrackEvent('Login', 'Login', $userId);
?>

所有其他页面和域名的JS跟踪代码(siteId会改变):

<script type="text/javascript">
var _paq = _paq || [];
(function(){ var u="//piwik.example.com/";
    _paq.push(['setSiteId', 1]);
    _paq.push(['setCookieDomain', '*.example.com']);
    _paq.push(['setDomains', '*.example.com']);
    _paq.push(['setTrackerUrl', u+'piwik.php']);
    _paq.push(['trackPageView']);
    _paq.push(['enableLinkTracking']);
    var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.type='text/javascript'; g.defer=true; g.async=true; g.src=u+'piwik.js';
    s.parentNode.insertBefore(g,s); }
)();
</script>

在Piwik的config.ini.php配置文件中,我设置了以下数值:
[Tracker]
enable_fingerprinting_across_websites=1
use_third_party_id_cookie = 1
visit_standard_length = 1800
window_look_back_for_visitor = 86400

我的问题是: 当我登录 secure.example.com 后,访问 support.example.com(或 www.example.com 等)时,Piwik 无法将这些访问与我之前设置的 UserID 相关联。 此外,如果我覆盖当前访问者的 UserID,则不会在 Piwik 后端更改。

1
这个有关的更新是什么? - dhana lakshmi
1个回答

0

从您试图做的描述来看,似乎使用无状态(stateless)设置可能会对您有所帮助。我也使用PHP作为后端。

JWT似乎非常适合您。JWT实际上是一个加密的JSON令牌,您将其提供给客户端,然后客户端在每个请求中发送该令牌到服务器,服务器验证该令牌而不是尝试维护会话。这意味着您可以让客户端将该令牌发送到您的任何一个域,并且具有验证该客户端的任何请求的标准系统。您可以将某些域或甚至域内的某些区域列入白名单等。

我已经链接了下面的白皮书。以及与之相关的一些其他链接。

请注意,建议在http请求头中发送令牌。我使用Authorization Bearer头。但是我已经看到一些实现使用cookie,他们建议不要在查询字符串中发送它。

相当确定这就是大型组织如何在网上全面跟踪您的方式。

由于需要对向后端发出的每个请求进行身份验证,因此无状态设计非常有趣。

希望这可以帮助您,如果您有任何问题,请告诉我。

JWT最佳实践

JWT白皮书

JWT声明

JWT当前最佳实践(这可能是一个重复,但我还是读了它)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接