diff options
author | MichaelHeerklotz <michael.heerklotz@web.de> | 2020-06-29 04:20:35 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-29 04:20:35 +0300 |
commit | be326c4abd2fd8b9958009dbe99802f378255c35 (patch) | |
tree | d7e4bdcc2de3ce8f3192340c172e08884987e518 | |
parent | f59f2eaff60e4dce5d3fc7f350fdb55f830ce0a0 (diff) |
Fix 3rd party cookie / global visitorid race condition: set 3rd party cookie during js code fetch (#13109)
Co-authored-by: Michael Heerklotz <michael.heerklotz@check24.de>
-rw-r--r-- | core/Tracker/Request.php | 6 | ||||
-rw-r--r-- | js/tracker.php | 13 |
2 files changed, 18 insertions, 1 deletions
diff --git a/core/Tracker/Request.php b/core/Tracker/Request.php index d35b538fc1..f307e7ff95 100644 --- a/core/Tracker/Request.php +++ b/core/Tracker/Request.php @@ -658,7 +658,7 @@ class Request return substr(trim($input), 0, CustomVariables::getMaxLengthCustomVariables()); } - protected function shouldUseThirdPartyCookie() + public function shouldUseThirdPartyCookie() { return (bool)Config::getInstance()->Tracker['use_third_party_id_cookie']; } @@ -684,6 +684,10 @@ class Request return; } + if (\Piwik\Tracker\IgnoreCookie::isIgnoreCookieFound()) { + return; + } + $cookie = $this->makeThirdPartyCookieUID(); $idVisitor = bin2hex($idVisitor); $cookie->set(0, $idVisitor); diff --git a/js/tracker.php b/js/tracker.php index ce9793b9cc..4e5ac618c3 100644 --- a/js/tracker.php +++ b/js/tracker.php @@ -67,6 +67,19 @@ $environment = new \Piwik\Application\Environment(null, array( )); $environment->init(); +if (!\Piwik\Tracker\IgnoreCookie::isIgnoreCookieFound()) { + + $request = new \Piwik\Tracker\Request(array()); + + if ($request->shouldUseThirdPartyCookie()) { + $visitorId = $request->getVisitorIdForThirdPartyCookie(); + if (!$visitorId) { + $visitorId = \Piwik\Common::hex2bin(\Piwik\Tracker\Visit::generateUniqueVisitorId()); + } + $request->setThirdPartyCookie($visitorId); + } +} + ProxyHttp::serverStaticFile($file, "application/javascript; charset=UTF-8", $daysExpireFarFuture, $byteStart, $byteEnd); exit; |