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

Mar*_*ler 5 javascript php cross-domain matomo

我想将当前访问者的 IP 链接到指定的用户 ID(通过 PHP),Piwik 应该跨多个(子)域跟踪该 ID。

有几个(子)域,我想给在 secure.example.com 登录的访问者(IP)一个唯一的用户 ID,以便在所有其他域上跟踪他。登录时的链接“IP -> UserID”应该在 PHP 中创建(Piwik Tracking PHP Client -> setUserId)。所有域(包括登录后的 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);
?>
Run Code Online (Sandbox Code Playgroud)

所有其他页面和域的 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>
Run Code Online (Sandbox Code Playgroud)

在 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
Run Code Online (Sandbox Code Playgroud)

我的问题是:当我登录到 secure.example.com 然后访问 support.example.com(或 www.example.com 等)时,Piwik 没有将这些访问链接到我之前设置的用户 ID。此外,如果我覆盖当前访问者的用户 ID,它不会在 Piwik 后端更改。

And*_*rew 0

从您尝试执行的操作的描述来看,您可能会从无状态设置中受益。我的后端也使用 PHP。

JWT 看起来可能很适合您。JWT 本质上是您提供给客户端的加密 JSON 令牌,然后客户端将每个请求中的令牌发送到服务器,服务器会验证该令牌,而不是尝试维护会话。这意味着您可以让客户端将该令牌发送到您的任何一个域,并拥有一个标准系统来验证来自该客户端的任何请求。您可以将某些域甚至域内的区域等列入白名单。

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

请注意,建议在 http 请求标头中发送令牌。我使用授权承载标头。但我见过一些使用 cookie 的实现,他们建议不要在查询字符串中发送它。

可以肯定,这就是大型组织在网上如此彻底地跟踪您的方式。

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

希望这会有所帮助,如果您有任何疑问,请告诉我。

智威汤逊最佳实践

智威汤逊白皮书

智威汤逊索赔

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