【问题标题】:How cookies affect Varnish caching?cookie 如何影响 Varnish 缓存?
【发布时间】:2011-07-25 09:30:09
【问题描述】:

Varnish 缓存如何影响 Omniture 设置的第三方 cookie 和 Google Analytics 设置的第一方 cookie?

到目前为止,我看到了反对意见,有人说因为跟踪统计信息是由 JavaScript 创建的(这是真的),从请求中删除这些 Cookie 不会影响 GA 或 Omniture。

但是here 他们说这些软件设置了各种 cookie 来跟踪重复访问者,因此从请求中删除这些 cookie 基本上会将每个用户都视为新访问者。

我不希望我的用户每次都算作新访问者。我不确定这些 JavaScript 嵌入是否能够计算页面是提供给第一次访问者还是经常访问者。任何指向官方 GA 或 Omniture 文档的链接都非常感谢。

【问题讨论】:

  • Google Analytics 使用第一方 cookie,而不是第三方 cookie。
  • 已编辑问题以反映这一点,谢谢。

标签: php cookies google-analytics varnish adobe-analytics


【解决方案1】:

这里有一个很好的例子:https://www.varnish-cache.org/trac/wiki/VCLExampleRemovingSomeCookies

基本上,您希望在 Varnish 将请求发送到后端之前删除所有 GA cookie:

sub vcl_recv {
  if (req.http.Cookie) {
    set req.http.Cookie = regsuball(req.http.Cookie, "(^|; ) *__utm.=[^;]+;? *", "\1"); # removes all cookies named __utm? (utma, utmb...) - tracking thing

    if (req.http.Cookie == "") {
        remove req.http.Cookie;
    }
  }
}

如果没有留下其他 cookie,Varnish 将自动缓存页面并将其传送给您的访问者。

【讨论】:

    【解决方案2】:

    Google Analytics 通过您域上的 javascript 设置 cookie。见How Google Analytics uses cookies

    Google Analytics(分析)仅使用第一方 饼干。这意味着所有 cookie 由 Google Analytics 为您设置 域仅向服务器发送数据 为您的域。

    对于清漆的使用,这意味着您可以缓存页面响应,因为个人 cookie 不是通过 Set-Cookie 标头设置的,而是由 javascript 生成的,对所有人都是平等的。然而,cookie 将随请求一起发送到您的域,并且当前的 default-vcl 表示:

    sub vcl_recv {
    
      ..
    
      if (req.http.Authorization || req.http.Cookie) {
        /* Not cacheable by default */
        return (pass);
      }
    }
    

    它说如果发送 cookie,它不会进行缓存查找。因此,在您的 vcl_recv 中,您应该“取消设置 req.http.Cookie”或不管 req.http.Cookie 进行查找。

    【讨论】:

    • 当您说个人 cookie 时,您指的是什么?由 Google Analytics 设置的 cookie,还是由 PHP 应用程序为登录用户设置的 cookie?
    • 个人 cookie 未通过 Set-Cookie 标头设置是否有任何外部来源证实这一点?
    • 我对个人 cookie 的意思是:特定于一个用户的 cookie 值(例如 SESSION_ID)。您不想将某人的个人 cookie 提供给其他人(例如,通过缓存响应)。可以缓存一个(引用)在客户端上生成个人 cookie 的脚本...
    • Session-ids 是通过 Set-Cookie 标头设置的,但 Google Analytics 不会在 GA 域上设置 Session
    • 回到您的问题“GA 代码如何读取 cookie?”,这不是通过 cookie 标头。您的服务器上没有运行 GA 的服务器代码。为您的域设置的 cookie 与一些 GA-javascript 一起发送到 GA 域。我不知道确切的机制,但它可以写一个 document.write('ga.com/?username=" + cookie.ga_username + ... ');,或者包含一个带有 ga-cookie 数据的 javascript作为参数。查看 firebug 资源选项卡或 live-http 标头插件以了解发送到不同主机的确切数据...
    【解决方案3】:

    Google Analaytics 在客户端使用 JavaScript 设置和读取 cookie,因此只要您没有设置任何冲突的 cookie,Varnish 缓存不会对其产生影响。

    cookie 本身可能会影响您的 Varnish 缓存——据我所知,Varnish 不会缓存任何具有 cookie 并依赖于它们的内容(即具有 Vary: Cookie 标头)。您可能需要自定义 VCL 规则以确保 Google Analytics cookie 不会阻止缓存。

    【讨论】:

    • 对不起,我刚刚编辑了这个问题,如果我让它有点难以回答。基本上,我正在研究从请求中删除这些 cookie 如何影响重复访问者统计信息。
    • 我可以确认访问者正在被跟踪。经常访问?没那么多。
    猜你喜欢
    • 1970-01-01
    • 2017-07-22
    • 2012-03-01
    • 2023-03-08
    • 1970-01-01
    • 2015-11-24
    • 1970-01-01
    • 2013-07-14
    • 2013-10-04
    相关资源
    最近更新 更多