Update browser-plugins on existing visit



it would be nice if the browser-plugin-list of the visitor is updated on each request.

If the visitor-id (uid, cid or _id) is the same, the detected plugins in the request should be used to update the “log_visit”-table. So the visitor could be found, even if the visitor-id is not present and his plugins changed during his visit.
Example (Actions of one session):

  • The user visits some pages on my website
  • Then he installs a new plugin
  • He visits some more pages on my website
  • He decides to clean his cookies -> the visitor-id gets lost
  • Again he visits some more pages on my website, but the visitor-id is not the same and his browser-plugins have changed.
    So the matching by browser finger print and visitor-id fails. If the browser plugin list in the DB would have been updated during his visit, he could be found again.

I’m detecting the browser plugins with some JavaScript code, pass it to the server and track the request on server side (Java). But on the first request the detection has not yet run. So on the first request the visit is saved in the DB whiteout any browser-plugins. On the second request (and all following) the server knows the detected browser-plugins and can pass it to the piwik-tracking-api, but piwik doesn’t update the browser-plugin-list of the visit (which was created on the first request).

These are the columns of the table “log_visit” which should be updated:
config_id <- should be recalculated after updating the other columns.

Therefore the function “onExistingVisit()” must be added to the Plugin* - Classes in “piwik / plugins / UserSettings / Columns /”. The function would be called from Visit.getExistingVisitFieldsToUpdate() see “piwik / core / Tracker / Visit.php”:

namespace Piwik\Plugins\UserSettings\Columns;

class PluginFlash extends VisitDimension
    protected $columnName = 'config_flash';
    protected $columnType = 'TINYINT(1) NOT NULL';

     * @param Request $request
     * @param Visitor $visitor
     * @param Action|null $action
     * @return mixed
    public function onNewVisit(Request $request, Visitor $visitor, $action)
        return Common::getRequestVar('fla', 0, 'int', $request->getParams());

    /* This function is required */
    public function onExistingVisit(Request $request, Visitor $visitor, $action)
        return Common::getRequestVar('fla', 0, 'int', $request->getParams());

(Matthieu Aubry) #2

Thanks for the suggestion! I think it makes sense and yes, we could update all settings fields at each pageview. Can you create a feature request in Github issues? Issues · matomo-org/piwik · GitHub


Thanks for the reply.

Created the issue #6408.