Конвертировать файлы cookie Google Analytics в локальное хранилище / хранилище сеансов - PullRequest
16 голосов
/ 21 декабря 2010

UPDATE http://jsfiddle.net/musicisair/rsKtp/embedded/result/


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

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

Итак, меня интересует, возможно ли:

  • переписать __utm* куки в локальное хранилище после того, как ga.js записало их
  • удалите их после того, как ga.js запустит
  • переписать куки из локального хранилища обратно в форму куки прямо перед тем, как ga.js прочитает их
  • начать заново

Или, monkey patch ga.js, чтобы использовать локальное хранилище перед началом чтения / записи cookie.

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

Я предполагаю, что голосование было отрицательным, потому что я не задавал вопрос. DOH!

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


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

Ответы [ 3 ]

17 голосов
/ 06 октября 2013

Используйте это:

(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' отключит куки. Теперь мы можем установить clientId из localStorage. Если он пуст, Google Analytics создаст для нас новый. Мы сохраняем новый (или существующий) клиент в localStorage после загрузки трекера.

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

Кроме того, проверьте этот план: http://plnkr.co/MwH6xwGK00u3CFOTzepK

2 голосов
/ 16 мая 2012

Некоторые эксперименты в 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.

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

0 голосов
/ 27 декабря 2010

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

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

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

Существует также третий вариант - запустить собственную версию ga.js.Вы не обязаны использовать версию Google.

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

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

  1. файлы cookie невелики, если вы используете домены без файлов cookie для всего статического контента, не так уж и много пользы
  2. это менее удобно, поскольку многие браузеры не поддерживаютэто еще
...