diff --git a/config/global.ini.php b/config/global.ini.php index a7504287df4c412aa6a6cf3e92ce12146265041f..73294cfb62f3f190596a0948bc4e18f14f46ee0b 100644 --- a/config/global.ini.php +++ b/config/global.ini.php @@ -356,6 +356,12 @@ record_statistics = 1 ; after his last page view, it will be recorded as a new visit visit_standard_length = 1800 +; The window to look back for a previous visit by this current visitor. Defaults to visit_standard_length. +; If you are looking for higher accuracy of "returning visitors" metrics, you may set this value to 86400 or more. +; This is especially useful when you use the Tracking API where tracking Returning Visitors often depends on this setting. +; The value window_look_back_for_visitor is used only if it is set to greater than visit_standard_length +window_look_back_for_visitor = 0 + ; visitors that stay on the website and view only one page will be considered as time on site of 0 second default_time_one_page_visit = 0 diff --git a/core/Tracker/Visit.php b/core/Tracker/Visit.php index c5c3032bd6c33452f23301203ba72c27e21c4948..0f6f2bcc60426e620a556e467fc36a7f66f0764c 100644 --- a/core/Tracker/Visit.php +++ b/core/Tracker/Visit.php @@ -1169,8 +1169,9 @@ class Piwik_Tracker_Visit implements Piwik_Tracker_Visit_Interface $from = "FROM ".Piwik_Common::prefixTable('log_visit'); $bindSql = array(); - - $timeLookBack = date('Y-m-d H:i:s', $this->getCurrentTimestamp() - Piwik_Config::getInstance()->Tracker['visit_standard_length']); + + + $timeLookBack = $this->getWindowLookupPreviousVisit(); $shouldMatchOneFieldOnly = $this->shouldLookupOneVisitorFieldOnly($isVisitorIdToLookup); @@ -1313,6 +1314,26 @@ class Piwik_Tracker_Visit implements Piwik_Tracker_Visit_Interface } } + /** + * By default, we look back 30 minutes to find a previous visitor (for performance reasons). + * In some cases, it is useful to look back and count unique visitors more accurately. You can set custom lookback window in + * [Tracker] window_look_back_for_visitor + * + * @return string + * + */ + protected function getWindowLookupPreviousVisit() + { + $lookbackNSeconds = Piwik_Config::getInstance()->Tracker['visit_standard_length']; + + $lookbackNSecondsCustom = Piwik_Config::getInstance()->Tracker['window_look_back_for_visitor']; + if ($lookbackNSecondsCustom > $lookbackNSeconds) { + $lookbackNSeconds = $lookbackNSecondsCustom; + } + $timeLookBack = date('Y-m-d H:i:s', $this->getCurrentTimestamp() - $lookbackNSeconds); + return $timeLookBack; + } + protected function shouldLookupOneVisitorFieldOnly($isVisitorIdToLookup) { // This setting would be enabled for Intranet websites, to ensure that visitors using all the same computer config, same IP