Convertire i cookie di Google Analytics per Local / Archiviazione sessione
-
12-10-2019 - |
Domanda
Aggiorna http://jsfiddle.net/musicisair/rsKtp/embedded/result/
Google Analytics imposta 4 biscotti che verranno inviati a tutte le richieste a quel dominio (e OFSET suoi sottodomini). Da quello che posso dire nessun server in realtà li utilizza direttamente ; vengono inviati solo con __utm.gif
come parametro di query.
Ora, ovviamente Google Analytics legge, scrive e agisce sulla loro valori e avranno bisogno di essere a disposizione lo script di monitoraggio GA.
Quindi, cosa che mi chiedo è se è possibile:
- riscrivere le cookie
__utm*
a memoria locale dopoga.js
di loro ha scritto - eliminarli dopo
ga.js
ha eseguito - riscrivere i cookie dal retro storage locale a forma di cookie a destra prima di loro
ga.js
legge
- ricominciare
In alternativa, scimmia cerotto ga.js
utilizzare storage locale prima che inizi il cookie di lettura / scrittura parte.
Ovviamente se stiamo andando così fuori il modo per rimuovere i cookie __utm*
ci vorrà utilizzare anche la variante asincrona di Analytics.
Sto indovinando voto verso il basso è stato perché non ho chiesto una domanda. DOH!
Le mie domande sono:
Può essere fatto come descritto sopra?
Se sì, perché non è già stato fatto?
Ho un modello di esempio di default HTML/CSS/JS
che passa YSlow, Page Speed, e Audit di Chrome con punteggi quasi perfette. Sto davvero cercando un modo per spremere quelli rimasti cookie di byte da Google Analytics nei browser che supportano la memorizzazione locale.
Soluzione
Utilizzare questa:
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
if(window.localStorage) {
ga('create', 'UA-98765432-1', 'www.example.com', {
'storage': 'none'
, 'clientId': window.localStorage.getItem('ga_clientId')
});
ga(function(tracker) {
window.localStorage.setItem('ga_clientId', tracker.get('clientId'));
});
}
else {
ga('create', 'UA-98765432-1', 'www.example.com');
}
ga('send', 'pageview');
In primo luogo, verificare se localStorage
è supportato. Se è supportato allora l'opzione 'storage': 'none'
disabilita i cookie. Ora siamo in grado di impostare il clientId da localStorage. Se è vuoto, Google Analytics genererà uno nuovo per noi. Salviamo il clientid nuova (o esistente) in localStorage dopo il caricamento del tracker.
Se localStorage
non è supportato, mi basta usare il metodo di analisi regolare. Dopo l'inizializzazione mando una pagina visualizzata tramite ga('send', 'pageView')
.
Inoltre, controllare questo Plunk: http://plnkr.co/MwH6xwGK00u3CFOTzepK
Altri suggerimenti
Alcuni esperimenti in Chrome mostra che potrebbe essere possibile utilizzare getter e setter per cerotto document.cookie
per questo, qualcosa di simile a:
document.__defineGetter__('cookie', function () {
// Replace this with code to read from localstorage
return "hello";
});
document.__defineSetter__('cookie', function (value) {
// Replace this with code to save to localstorage
console.log(value);
});
ga.js (o qualsiasi altro Javascript) potrebbe funzionare e biscotti di accesso come normale, solo che non si sarebbe mai passata al server.
Ovviamente questo funziona solo in alcuni browser. I browser in cui non abbia lavoro dovrà ricadere cookie normali.
Ci sono alcune idee correlate a questa domanda: E 'possibile per document.cookie finto in JavaScript?
Si può essere fatto. Basta chiedere la __utm.gif
con i parametri. Il resto dei dati è solo utilizzato per tenere traccia della fonte, ora di inizio della sessione e / o visite precedenti.
È possibile trasferire facilmente i biscotti in entrambe le direzioni, in modo che il primo approccio dovrebbe funzionare bene.
Se il secondo approccio funziona ... non è sicuro. Non conosco il codice abbastanza buono ga.js
stimare wheter che sarebbe o non sarebbe facilmente possibile.
C'è anche una terza opzione, eseguire la propria versione di ga.js
. Non è necessario utilizzare la versione di Google.
Può essere fatto come descritto sopra? Sì
Perché non è stato fatto?
- i cookie sono piccoli, non è che molto beneficio se si utilizzano i domini senza cookie per tutti i tuoi contenuti statici
- è meno conveniente dal momento che un sacco di browser non supportano ancora