Преобразование файлов cookie Google Analytics в локальное/сеансовое хранилище.

StackOverflow https://stackoverflow.com/questions/4502128

Вопрос

ОБНОВЛЯТЬ http://jsfiddle.net/musicisair/rsKtp/embedded/result/


Google Analytics устанавливает 4 файла cookie, которые будут отправляться со всеми запросами в этот домен (и компенсировать его поддомены).Насколько я могу судить, ни один сервер на самом деле их не использует. напрямую;они отправляются только с __utm.gif в качестве параметра запроса.

Теперь, очевидно, Google Analytics читает, записывает и действует на основе своих значений, и они должны быть доступны для сценария отслеживания GA.

Итак, мне интересно, можно ли:

  • переписать __utm* файлы cookie в локальное хранилище после ga.js написал их
  • удалите их после ga.js побежал
  • перезапишите файлы cookie ИЗ локального хранилища обратно в форму файлов cookie прямо перед ga.js читает их
  • начать сначала

Или, обезьяна патч ga.js использовать локальное хранилище до того, как начнется часть чтения/записи файлов cookie.

Очевидно, что если мы зайдём так далеко, чтобы удалить __utm* cookie, мы также захотим использовать асинхронный вариант Analytics.

Я предполагаю, что голосование против произошло потому, что я не задал вопрос.ДОХ!

Мои вопросы:
Можно ли сделать так, как описано выше?
Если да, то почему этого не было сделано?


у меня есть значение по умолчанию HTML/CSS/JS шаблонный шаблон, который проходит YSlow, PageSpeed ​​и Chrome Audit с почти идеальными оценками.Я действительно ищу способ сжать оставшиеся байты cookie из Google Analytics в браузерах, поддерживающих локальное хранилище.

Это было полезно?

Решение

Использовать это:

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

Сначала я проверяю, есть ли localStorage поддерживается.Если он поддерживается, то 'storage': 'none' опция отключит файлы cookie.Теперь мы можем установить clientId из localStorage.Если он пуст, Google Analytics сгенерирует для нас новый.Мы сохраняем новый (или существующий) clientid в localStorage после загрузки трекера.

Если localStorage не поддерживается, я просто использую обычный метод аналитики.После инициализации я отправляю pageView через ga('send', 'pageView').

Также обратите внимание на этот план: http://plnkr.co/MwH6xwGK00u3CFOTzepK

Другие советы

Некоторые эксперименты в Chrome показывают, что для исправления можно использовать геттеры и сеттеры. document.cookie для этого что-то вроде:

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 (или любой другой javascript) может запускать файлы cookie и получать к ним доступ как обычно, они просто никогда не передаются на сервер.

Очевидно, это будет работать только в некоторых браузерах.Браузеры, в которых он не работает, будут вынуждены вернуться к обычным файлам cookie.

В этом вопросе есть некоторые связанные идеи: Можно ли высмеять document.cookie в JavaScript?

Да, это может быть сделано.Вам нужно только запросить __utm.gif с параметрами.Остальные данные используются только для отслеживания источника, времени начала сеанса и/или предыдущих посещений.

Вы можете легко передавать файлы cookie в обе стороны, поэтому ваш первый подход должен работать нормально.

Если ваш второй подход сработает...не уверен.я не знаю ga.js код достаточно хорош, чтобы оценить, будет ли это легко или невозможно.

Есть еще третий вариант — запустить свою версию ga.js.Вам не обязательно использовать версию Google.

Можно ли сделать так, как описано выше?Да

Почему это не было сделано?

  1. файлы cookie маленькие, и нет особой пользы, если вы используете домены без файлов cookie для всего своего статического контента.
  2. это менее удобно, поскольку многие браузеры его еще не поддерживают.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top