Une idée pour GA sans cookie...

  • Auteur de la discussion Auteur de la discussion ortolojf
  • Date de début Date de début
WRInaute accro
Bonjour

C'st un petit exemple théorique de GA compliant GDPR.

Très simple, mais est-ce que celà suffit pour Analytics ?

l'adresse ip n'y est pas.

Que va faire GA sans localisation ?


Code:
  D'abord :
 
  /******* UUID.php ********/

 
<?php
function UUID_v4($anonid)
{
    /**
    * Fonction de hash
    * hash("ripemd128", $anonid)
    * avec $anonid
    * en paramètre.
    **/
    /**
    * Génère 32 caractères
    * mais algorihtme
    * correct ?
    **/
    $randomString = hash("ripemd128", $anonid);
    $time_low = bin2hex(substr($randomString, 0, 4));
    $time_mid = bin2hex(substr($randomString, 4, 2));
    $time_hi_and_version = bin2hex(substr($randomString, 6, 2));
    $clock_seq_hi_and_reserved = bin2hex(substr($randomString, 8, 2));
    $node = bin2hex(substr($randomString, 10, 6));
    /**
    * Set the four most significant bits (bits 12 through 15) of the
    * time_hi_and_version field to the 4-bit version number from
    * Section 4.1.3.
    * @see http://tools.ietf.org/html/rfc4122#section-4.1.3
    */
    $time_hi_and_version = hexdec($time_hi_and_version);
    $time_hi_and_version = $time_hi_and_version >> 4;
    $time_hi_and_version = $time_hi_and_version | 0x4000;
    /**
    * Set the two most significant bits (bits 6 and 7) of the
    * clock_seq_hi_and_reserved to zero and one, respectively.
    */
    $clock_seq_hi_and_reserved = hexdec($clock_seq_hi_and_reserved);
    $clock_seq_hi_and_reserved = $clock_seq_hi_and_reserved >> 2;
    $clock_seq_hi_and_reserved = $clock_seq_hi_and_reserved | 0x8000;
    return "'" . sprintf('%08s-%04s-%04x-%04x-%012s', $time_low, $time_mid, $time_hi_and_version, $clock_seq_hi_and_reserved, $node) . "'";
} // guid
?>

  Ensuite :

/**********  GA.php ********/

<?php
require("UUID.php");
$anonid = "ERVTEBBfggf:";
echo "`\nga('create', 'UA-XXXXX-Y', {
    'storage': 'none',
    'storeGac': false,
    'clientId': " . UUID_v4($anonid) . "
    });\n\n";
echo "ga('send', 'pageview');\n\n";
?>

Résultat :

Code:
ga('create', 'UA-XXXXX-Y', {
    'storage': 'none',
    'storeGac': false,
    'clientId': '32303438-6366-4393-8e0d-623535396466'
    });
ga('send', 'pageview');


Merci beaucoup de vos réponses.

Amicalement.
 
WRInaute accro
Sérieux t'es encore en train de perdre du temps avec ces cookies à la noix ?

tenor.gif
 
WRInaute accro
Bof, bof...

Chacun sa méthode n'est-ce pas ?

Je vais me renseigner. ;)

Par rapport à GA évidement. .;)

Amicalement.
 
WRInaute accro
Bonjour

Je vais voir pour le site.

Voici la version Global tag ci-dessous.

Merci beaucoup de m'indiquer quels paramètres pour disabler les cookies.

Ex. : 'user_id' ou 'clientId', et puis 'storage' et 'storeGac'.

Merci.

Amicalement.


Code:
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-137618084-1"></script>
<script>
   
  window['ga-disable-UA-137618084-1'] = (true|false);
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
  gtag('config', 'UA-137618084-1', { 
      'anonymize_ip': true,
      'storage': 'none',
      'storeGac': false,
      'clientId': 'UUID_v4($anonid)',
      'user_id': 'USER_ID',
  });
</script>
 
WRInaute accro
Bonjour

Voilà le code.

Je prend le client_id à partir de la "custom définition" de nom client_ID, d'index 1 que j'ai créée dans GA de type "User", et puis j'ai créé dans GTM la variable _ga de type : cookie primaire du même nom client_ID.

J'espère que celà suffira pour rendre visible demain dans GA cette variable client_ID.

Bien amicalement.


Code:
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-137618084-1"></script>
<script>
var value_cookie_permitted;
value_cookie_permitted = getCookie('cookieconsent_status');
if(value_cookie_permitted == 'allow')
{
window['ga-disable-UA-137618084-1'] = false;
console.log('enable GA');
}
else
{
window['ga-disable-UA-137618084-1'] = true;
console.log('disable GA');
}
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('set', {
'anonymize_ip': true,
'cookie_expires': 395 * 24 * 60 * 60 // 13 mois.
});
gtag('js', new Date());
gtag('config', 'UA-137618084-1', {
'custom_map': {
'dimension1': 'clientId'
}
});
</script>
 
WRInaute accro
Bonjour

Est-ce que le code ci-dessous est correct ?

C'est pour Google Analytics.

Je n'ai pas trouvé pour GA le moyen de me passer des cookies.

Le système de gestion de cookies : 'Cookie_consent' gère l'acceptation/refus par le visiteur des cookies ( en mode opt-tout ) donc de Google Analytics.

Ce mode opt-out, fait que l'acceptation explicite du visiteur est nécessaire avant de poser aucun cookie ( hormis le cookie de session 'SES' et celui de gestion de cookie 'cookieconsent_status'.

Celà a induit une chute drastique de ma fréquentation Google : 1.665 vu/jour en mars, 565 vu/jour hier.

A votre avis, Google s'aperçoit-il de la cause de cette chute de fréquentation ?

Le code activant/désactivant GA est conforme aux guideline Google ?

Merci beaucoup de vos conseils.

Amicalement.


Code:
<script>
function remove_cookie(tmp_name)
{
// Cookie https.
securite = true;
chemin = undefined;
domaine = undefined;
var d = new Date();
d.setTime(d.getTime() - 24*60*60*1000);
var tmp_expire = '; expires=' + d.toUTCString();
var tmp_value = '';
// alert(tmp_name + '=' + tmp_value + tmp_expire + '; path=/' + ((chemin === undefined) ? '' : chemin) + ((domaine === undefined) ? '' : '; domain=' + domaine) + ((securite === true) ? '; secure' : ''));
document.cookie = tmp_name + '=' + tmp_value + tmp_expire + '; path=/' + ((chemin === undefined) ? '' : chemin) + ((domaine === undefined) ? '' : '; domain=' + domaine) + ((securite === true) ? '; secure' : '');
}
function getCookie(name)
{
var nameEQ = name + '=';
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
function getAllCookies()
{
var AllCookies = Array();
var nameRegexp = new RegExp("[^=]+=");
var ca = document.cookie.split(';');
k=0;
for(var i=0;i < ca.length;i++) {
var c = ca[i].toString().trim();
if(c.match(nameRegexp))
{
var j = c.indexOf('=');
AllCookies[k] = c.substring(0, j);
k++;
}
}
if(k > 0)
{
return AllCookies;
}
return null;
}
function remove_All_Cookies()
{
var AllCookies = Array();
AllCookies = getAllCookies();
if(AllCookies !== null)
{
for(var i = 0;i < AllCookies.length; i++)
{
var cookie = AllCookies[i].toString().trim();
/*
* Cookie de session
* et cookie de gestion
* de cookies.
*/
if((cookie != 'SES')&&(cookie != 'cookieconsent_status'))
{
remove_cookie(cookie);
}
}
}
}
function onLog (status) {
console.log(status ? 'enable cookies' : 'disable cookies');
}
</script>

<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-137618084-1"></script>

<script>
var value_cookie_permitted;
value_cookie_permitted = getCookie('cookieconsent_status');

if(value_cookie_permitted == 'allow')
{
window['ga-disable-UA-137618084-1'] = false;
console.log('Google Analytics activé.');
}
else
{
window['ga-disable-UA-137618084-1'] = true;
console.log('Google Analytics désactivé.');
}

window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('set', {
'anonymize_ip': true,
'cookie_expires': 395 * 24 * 60 * 60 // 13 mois.
});
gtag('js', new Date());
gtag('config', 'UA-137618084-1');

</script>
 
WRInaute accro
https://developers.google.com/analytics/devguides/collection/analyticsjs/cookies-user-id

Bon, on en avait parlé dans un autre topic et comme tu veux refaire la roue, tu te dis que ce n’est pas full RGPD :
https://www.webrankinfo.com/forum/t/plugin-dopt-out-pour-google-analytics.193869/

Bref, si tu veux être full RGPD tu ne dois pas être capable de suivre le visiteur du tout, rien, nada, que dalle. Si je vais sur ton site et que je pars, tu ne dois pas savoir que c'est moi quand je reviens. Donc il ne faut mettre aucun système de suivi au final. :-)

Sinon il y a fingerprint et le localstorage comme dans cet exemple (je sais pas si il est récent) qui fait que tu as juste une empreinte unique du visiteur, mais qu'elle est stockée chez lui et non sous forme de cookie domaine.
https://codepen.io/run-time/pen/XJNXWV
 
WRInaute accro
Bonjour cthierry

J'ai ce code ci-dessous.

Je ne comprend pas comment le clientId est calculé.

var tracker_id = GA_TRACKING_ID.replace(/-/g, '_');
var tracker = window.ga.getByName('gtag_'+tracker_id);
var _lsc_clientId = tracker.get('clientId');

Qu'est-ce qui fait, que_lsc_clientId contient le clientId de Google ?

Et puis, aussi :

Faut-il déclarer la variable 'clientId' dans le Google Tag Manager ?

Merci beaucoup de ton aide.


Code:
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-137618084-1"></script>
<script>
var GA_TRACKING_ID = 'UA-137618084-1';
var value_cookie_permitted;
value_cookie_permitted = getCookie('cookieconsent_status');
if(value_cookie_permitted == 'allow')
{
    window['ga-disable-' + GA_TRACKING_ID] = false;
    console.log('Google Analytics activé.');
}
else
{
    window['ga-disable-' + GA_TRACKING_ID] = true;
    console.log('Google Analytics désactivé.');
}
var localStorageCid = {
    objectName: 'ga_client_id',
    expires: 1000*60*60*24*395    // en millisecondes.
  };
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
if (window.localStorage) {
  var lsCid;
  var jsonObj = window.localStorage.getItem(localStorageCid.objectName) || '{}';
  var obj = JSON.parse(jsonObj);
  var now = new Date().getTime();
  if (obj.clientId && obj.expires) {
    if (now <= obj.expires) {
      lsCid = obj.clientId;
    }
  }
 
  //initialize - but do not send auto-hit
  //add your own additional options here if present in existing code
  gtag('config', GA_TRACKING_ID, { 'anonymize_ip': true, 'send_page_view': false, 'client_id': lsCid});
 
  //pageview gets sent now with callback for storing the Client ID
  gtag('event', 'page_view', {
    'event_callback': function() {
      var tracker_id = GA_TRACKING_ID.replace(/-/g, '_');
      var tracker = window.ga.getByName('gtag_'+tracker_id);
      var _lsc_clientId = tracker.get('clientId');
      var _lsc_obj = JSON.stringify({
          clientId: _lsc_clientId,
          expires: new Date().getTime() + localStorageCid.expires
      });
      window.localStorage.setItem(localStorageCid.objectName, _lsc_obj);
    }
  });
}
else {
  //add your own additional options here if present in existing code
  gtag('config', GA_TRACKING_ID, {
    'anonymize_ip': true,
    'cookie_expires': 395 * 24 * 60 * 60  // 13 mois ( en secondes ).
 });
}
</script>
 
WRInaute accro
Voili, voilou

J'ai créé une dimension personnalisée sous GA : 'Client_ID' de type User.

J'ai créé sous GTM la variable Javascript personnalisée ci-dessous ''Client_ID' :

J'ai créé le déclencheur 'Client_ID_loaded', rendant cette valeur 'Client_ID' dans les conditions : 'window loaded' et 'Client_ID not equal false'.

Qu'est-ce qui me reste à faire pour que Client-ID soit lisible par : tracker.get('clientId'); ?

Et, quelle valeur attribuer à tracker ?

ga ?

Merci beaucoup de vos réponses.

Respectueusement.


Code:
function() [
      try {
                var tracker = ga.getAll()[0];
                return tracker.get('clientId');
        } catch (e) {
                return false;
        }
}
 
Dernière édition:
WRInaute accro
Bon, bon...

Je crois que je ne vais pas installer GA avec un local storage.

Ce type de tracking n'est pas GDPR compliant, et c'est d'une complexité abominable.

Je reste avec mon code actuel, avec les cookies classiques de GA.

Une question cependant :

Mon implémentation ( Cookie_consent ) de gestion de cookies, ne différencie pas le fait de refuser/accepter les cookies GA, et les hash-codes anonyme et unidirectionnels des adresses IP pour l'anti-aspirateur.

Est-ce que je suis obligé de présenter la possibilité d'accepter/refuser ces deux choses séparément ?

Merci beaucoup pour vos réponses.

Très respectueusement.
 
WRInaute accro
Rebonjour

Comment rendre cookieconsent compatible avec le "Do Not Track" ?

Faut-il détecter celà manuellement ?

Merci.

Amicalement.
 
Discussions similaires
Haut