首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将Google Analytics cookies转换为本地/会话存储

将Google Analytics cookies转换为本地/会话存储
EN

Stack Overflow用户
提问于 2010-12-22 01:29:25
回答 3查看 6.2K关注 0票数 16

更新 http://jsfiddle.net/musicisair/rsKtp/embedded/result/

Google Analytics设置了4个cookie,这些cookie将与所有请求一起发送到该域(以及它的子域)。据我所知,实际上没有服务器直接使用;它们只与__utm.gif一起作为查询参数发送。

现在,很明显,Google Analytics读取、写入和操作它们的值,它们将需要可用于GA跟踪脚本。

所以,我想知道是否有可能:

  • ga.js写入__utm* cookie之后将其重写到本地存储中
  • 在<代码>D15读取它们之前将cookie从本地存储重写回cookie形式<代码>H216<代码>H117从头开始<代码>H218<代码>F219

或者,在ga.js开始读/写cookie部分之前,猴子为cookie打补丁以使用本地存储。

显然,如果我们在删除__utm* cookies方面走得太远,我们也会想要使用分析的异步变体。

我猜反对票是因为我没问问题。多!

我的问题是:

可以像上面描述的那样做吗?

如果这样做了,为什么还没有做呢?

我有一个默认的HTML/CSS/JS样板模板,它以近乎完美的分数通过了YSlow,PageSpeed和Chrome的审计。我真的在寻找一种方法,在支持本地存储的浏览器中从Google Analytics中挤出那些剩余的cookie字节。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-06 16:45:48

使用以下命令:

代码语言:javascript
复制
(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'选项将禁用cookies。现在我们可以从localStorage设置clientId了。如果它是空的,谷歌分析将为我们生成一个新的。在跟踪器加载后,我们将新的(或现有的)客户端in保存在localStorage中。

如果不支持localStorage,我只使用常规的分析方法。初始化之后,我通过ga('send', 'pageView')发送了一个pageView。

还有,看看这个:http://plnkr.co/MwH6xwGK00u3CFOTzepK

票数 20
EN

Stack Overflow用户

发布于 2012-05-16 18:03:47

在chrome中的一些实验表明,可以使用getters和setters来修补document.cookie,如下所示:

代码语言:javascript
复制
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。

在这个问题中有一些相关的想法:Is it possible to mock document.cookie in JavaScript?

票数 2
EN

Stack Overflow用户

发布于 2010-12-27 22:46:24

是的,这是可以做到的。您只需请求带有参数的__utm.gif。其余数据仅用于跟踪源、会话开始时间和/或之前的访问。

您可以轻松地以两种方式传输cookie,因此您的第一种方法应该可以很好地工作。

如果你的第二种方法行得通...不确定。我不太了解ga.js代码,无法估计这是不是很容易实现。

还有第三种选择,运行您自己的ga.js版本。您不需要使用Google版本。

可以像上面描述的那样做吗?是

为什么还没有做呢?

  1. cookies很小,如果您将无cookies的域名用于所有静态内容
  2. 并没有太多好处它不太方便,因为很多浏览器还不支持
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4502128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档