16

UPDATE http://jsfiddle.net/musicisair/rsKtp/embedded/result/Konvertieren Google Analytics Cookies Local/Session Speicher


Google Analytics 4 Cookies setzt, die zu dieser Domäne bei allen Anfragen gesendet wird (und ofset Subdomains). Von dem, was ich sagen kann, verwendet kein Server sie tatsächlich direkt; Sie werden nur mit __utm.gif als Abfrageparameter gesendet.

Jetzt liest, schreibt und handelt Google Analytics natürlich ihre Werte und diese müssen dem GA-Tracking-Skript zur Verfügung stehen.

Also, was ich frage mich, wenn es möglich ist, zu:

  • die __utm* Cookies auf einen lokalen Speicher neu zu schreiben, nachdem ga.js sie
  • löschen sie geschrieben hat, nachdem ga.js
  • umschreiben die Cookies ausgeführt wurde Vom lokalen Speicher zurück zum Cookie-Formular direkt vor ga.js liest sie
  • starten über

Oder Affe Patch ga.js lokalen Speicher zu verwenden, bevor es den Cookie-Lese-/Schreib-Teil beginnt.

Offensichtlich, wenn wir so weit aus dem Weg gehen, um die __utm* Cookies zu entfernen, wollen wir auch die Async-Variante von Analytics verwenden.

Ich vermute, die down-Abstimmung war, weil ich keine Frage gestellt habe. DOH!

Meine Fragen sind:
Kann es wie oben beschrieben getan werden?
Wenn ja, warum wurde es nicht gemacht?


Ich habe eine Standard HTML/CSS/JS Textvorlage, die YSlow, Page Speed ​​geht, und Chrome Audit mit nahezu perfekten Noten. Ich bin wirklich auf der Suche nach einer Möglichkeit, die verbleibenden Cookie-Bytes aus Google Analytics in Browsern zu komprimieren, die lokalen Speicher unterstützen.

+1

+1 für den gut beschriebenen Fall – Wolph

+0

@WoLpH vereinbart ... – Webnet

+0

Dies scheint eine wirklich gute Idee. Ein Anwendungsfall, den ich mir vorstellen kann, ist, wenn Sie einen Reverse-Proxy/CDN vor Ihrer Site haben, der zurückfällt (Ursprungs-Pull), wenn die Seite nicht statisch ist. Ein solcher Proxy sieht möglicherweise ein eindeutiges Cookie und zieht daher den Ursprung, anstatt die zwischengespeicherte Kopie der bereits vorhandenen Seite zu verwenden. – rjmunro

Antwort

16

verwenden:

(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'); 

Zuerst habe ich überprüfen, ob localStorage unterstützt wird. Wenn es unterstützt wird, deaktiviert die Option 'storage': 'none' Cookies. Jetzt können wir die clientId von localStorage setzen. Wenn es leer ist, wird Google Analytics ein neues für uns generieren. Wir speichern die neue (oder vorhandene) Client-ID in localStorage, nachdem der Tracker geladen wurde.

Wenn localStorage nicht unterstützt wird, verwende ich nur die regelmäßige Analyse-Methode. Nach der Initialisierung sende ich einen PageView über ga('send', 'pageView').

Überprüfen Sie auch, diese zupfen: http://plnkr.co/MwH6xwGK00u3CFOTzepK

+2

Gut gemacht. In den meisten Fällen möchten Sie zunächst einen Feature-Test für localStorage durchführen (möglicherweise mithilfe von Modernizr und dann zurück zum Cookie-Speicher. –

+0

) Können Sie erklären, was der Zweck dieses Codes ist? ? –

+0

Lesen Sie mehr darüber hier: http: // jsfiddle.net/musicisair/rsKtp/embedded/Ergebnis/ –

0

Ja, es kann getan werden. Sie müssen nur die __utm.gif mit den Parametern anfordern. Der Rest der Daten wird nur verwendet, um die Quelle, die Startzeit der Sitzung und/oder frühere Besuche zu verfolgen.

Sie können die Cookies einfach in beide Richtungen übertragen, so dass Ihre erste Annäherung gut funktionieren sollte.

Wenn Ihr zweiter Ansatz funktioniert ... nicht sicher. Ich kenne den Code ga.js nicht gut genug, um einzuschätzen, ob das nicht möglich wäre oder nicht.

Es gibt auch eine dritte Option, führen Sie Ihre eigene Version ga.js. Sie müssen die Google-Version nicht verwenden.

Kann es wie oben beschrieben gemacht werden? Ja

Warum wurde es nicht gemacht?

  1. die Plätzchen sind klein, es nicht so viel Nutzen, wenn Sie cookieless Domains für alle Ihre statische Inhalte
  2. es ist weniger bequem verwenden, da viele Browser es noch nicht unterstützen
2

Einige Experimente in Chrom zeigt, dass es möglich sein kann, Getter und Setter zu verwenden document.cookie dafür zu flicken, so etwas wie:

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 (oder jedes andere Javascript) könnte normal laufen und auf Cookies zugreifen, sie würden niemals an den Server weitergegeben werden.

Offensichtlich funktioniert das nur in einigen Browsern. Browser, in denen es nicht funktioniert, müssen auf normale Cookies zurückgreifen.

Es gibt einige relevante Ideen in dieser Frage: Is it possible to mock document.cookie in JavaScript?