饼干如何影响Varnish缓存?

3
Varnish缓存如何影响由Omniture设置的第三方Cookie和由Google Analytics设置的第一方Cookie?
到目前为止,我看到了对此有不同看法的人。有些人说由于跟踪统计数据是由JavaScript创建的(这是正确的),因此从请求中除去这些Cookie不会影响GA或Omniture。
然而,在这里他们说这些软件设置各种Cookie来跟踪重复访问者,因此从请求中剥离这些Cookie基本上会将每个用户都计算为新的访问者。
我不希望我的用户每次都被视为新的访问者。我也不确定这些JavaScript嵌入是否有能力计算页面是向初次访问者还是再次访问者提供服务。非常感谢官方GA或Omniture文档的任何链接。

Google Analytics 使用的是第一方 Cookie,而不是第三方 Cookie。 - Yahel
编辑问题以反映这一点,谢谢。 - amateur barista
3个回答

4
这里有一个很好的例子: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会自动缓存并向您的访问者提供页面。

1

Google Analytics 通过 JavaScript 在您的域上设置 cookie。请参见Google Analytics 如何使用 cookie

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

对于 Varnish 的使用,这意味着您可以缓存页面响应,因为个人 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? - amateur barista
个人的 cookie 不是通过 Set-Cookie 标头设置的。有没有任何外部来源证实这一点? - amateur barista
我所说的个人cookie是指:一个特定于一个用户的cookie值(例如SESSION_ID)。您不希望将某人的个人cookie交给其他人(例如通过缓存响应)。但是,缓存生成客户端上的个人cookie的脚本(引用)是可以的... - ivy
你说得对,GA不会在GA域上设置cookie(那将是第三方cookie)。就像你链接的文档所说的那样,它们会在你自己服务器的域上设置,使它们成为第一方cookie。 - amateur barista
1
为了回答你的问题“GA代码如何读取cookie?”它不是通过cookie标头进行的。在您的服务器上没有运行GA的服务器代码。为您的域设置的cookie将与一些GA JavaScript一起发送到GA域。我不清楚确切的机制,但它可能会写入一个document.write('<img src="http://ga.com/?username=" + cookie.ga_username + ... ');,或包含一个JavaScript,其中包含ga-cookie数据作为参数。查看firebug资源选项卡或live-http标头插件,以了解发送到不同主机的确切数据... - ivy
显示剩余3条评论

1

Google Analytics 使用客户端 JavaScript 设置和读取 cookie,因此只要您没有设置任何冲突的 cookie,Varnish 缓存不会受到影响。

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


抱歉我刚刚编辑了问题,如果让它难以回答了一些。基本上我想知道从请求中删除这些 cookie 如何影响重复访问者的统计数据。 - amateur barista
我可以确认访问者正在被跟踪。但是,重复访问并没有那么多。 - amateur barista

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接