IT技术博客大学习 共学习 共进步

网站统计:第一方Cookie和第三方Cookie

标点符 2011-08-26 22:22:20 浏览 4,964 次

    什么是 Cookie?

    Cookie 是您访问过的网站创建的文件,用于存储浏览信息,例如您的网站偏好设置或个人资料信息。共有两种类型的 Cookie:第一方 Cookie 是由地址栏中列出的网站域设置的 Cookie,而第三方 Cookie 来自在网页上嵌入广告或图片等项的其他域来源。

    

    Cookie可以用来提升用户体验,比如网站可以使用Cookie来记录用户的登录状态,用户只要登录一次就可以不用登录了,购物网站通过Cookie来保存购物车中的商品等。同时很多的网站分析都是依靠Cookie来完成的。

    以网站统计为例,目前主要的统计方式是日志记录法和页面标记法。一般日志记录法细化到IP,而页面标记法细化到Unique Visitor。UV并不仅仅是一个指标,更重要的是的它可以把一个用户多次访问的事件联系在一起。包括用户第一次从哪里来,第二次从哪里来,在网站上的浏览轨迹等都可以查询出来。

    Cookie是如何工作的?

    一般来说,Cookie通过HTTP Headers从服务器端返回到浏览器上。首先,服务器端在响应中利用Set-Cookie header来创建一个Cookie ,然后,浏览器在它的请求中通过Cookie header包含这个已经创建的Cookie,并且反它返回至服务器,从而完成浏览器的论证。

    比如,我们访问一个网站,来到了登录的页面。页面需要我们输入用户名和密码,同时下面有一个选项,叫“保留我的登录状态”,如果输入了用户名,密码。为了下次在来这个网站,不用再重新输入,我们激活了保留状态的选项。最后点了提交。这时,我们的浏览器就会和网站服务器之间通过HTTP协议进行连接,提交刚才输入的内容和选择。服务器收到以后,会判断这个用户名密码是否正确,因为我们需要保留状态,就需要设置Cookie来记录状态。那服务器会在返回的HTTP数据包的头部包含SetCookie这个指令来告诉浏览器要保存的Cookie。浏览器收到以后会把这个Cookie加密存储到电脑上。这个Cookie记录的一般是用户在这个网站的唯一的ID。之后,只要每次访问这个网站(只要还是这个域名),我们的浏览器在请求这个网站服务器数据的时 候,都会在HTTP请求数据包的头部增加一条包含Cookie数据的信息,比如这里会告诉服务器:“我是你的用户,我的ID是9527。”那服务器收到这 个信息,就不会再提示登录,而我们就已经是登录的状态了。

    第一方Cookie和第三方Cookie

    Cookie通常可以分为两类,第一方Cookie和第三方Cookie,第一方Cookie和第三方Cookie,都是网站在客户端上存放的一小块数据。他们都由某个域存放,只能被这个域访问。他们的区别其实并不是技术 上的区别,而是使用方式上的区别。比如,访问www.a.com这个网站,这个网站设置了一个Cookie,这个Cookie也只能被www.a.com 这个域下的网页读取,这就是第一方Cookie。如果还是访问www.a.com这个网站,网页里有用到www.b.com网站的一张图片,浏览器在 www.b.com请求图片的时候,www.b.com设置了一个Cookie,那这个Cookie只能被www.b.com这个域访问,反而不能被 www.a.com这个域访问,因为对我们来说,我们实际是在访问www.a.com这个网站被设置了一个www.b.com这个域下的Cookie,所以叫第三方Cookie。

    第一方Cookie的优势和应用

    第一方Cookie的最大优势是接受率高。一般主流的浏览器的都会有隐私的设置,可以让用户设置是否接受Cookie,接受哪些Cookie。除了 完全不接受Cookie这个设置以外,其他情况下,第一方Cookie都是会被用户接受的(不接受的话,是没办法把那小块数据保存下来的)。所以,如果没有特殊要求,使用第一方Cookie会比第三方Cookie,我们通过分析工具得到的数据会更准确。

    第三方Cookie的优势和应用

    第三方Cookie的接受率不如第一方Cookie(不过主流的浏览器默认的设置下也接受带P3P协议的第三方Cookie,我的经验是接受率能达 到90%,甚至95%以上),但在某些特定情况下可以实现第一方Cookie无法实现的功能。比如,当我们有多个域名的网站需要跟踪,我们希望了解到用户点击某个广告到达域名A下的网页,然后可能浏览了不论那个域名下的页面,最后在域名B下的网页完成注册的情况。广告可以在域名A下的网页被跟踪到,而注册可以在域名B下的网页跟踪到。如果我们使用第一方Cookie,会为域名A建立一个Cookie,为域名B再建立一个Cookie,他们可以关联各自域名下网页上的行为,但是无法关联起来。而使用第三方Cookie,那么无论多少个域,都只有一个Cookie,一个属于第三方域的Cookie,网站下所有域都能共享这个Cookie,那么所有的行为都能被关联起来分析。

    结论:对于通过脚本型的网站分析工具来获取数据

  • Cookie是必须的,离开Cookie我们什么也分析不了。
  • 第一方Cookie接受率高,更准确,没有特殊需要就用他。
  • 第三方Cookie可以跨域跟踪,特别需求可以应用。
  •     P3P解决第三方cookie存取的问题

        P3P(Platform for Privacy Preferences)是由万维网协会研制,它为Web用户提供了对自己公开信息的更多的控制。支持P3P的Web站点可以为浏览者声明他们的隐私策略。支持P3P的浏览器则可以将Web站点的策略与用户的隐私偏好进行对比,并为用户提出不匹配的警告。因此,用户可以被通知有关Web隐私的处理方式。更详细的说明请看http://www.w3.org/P3P/的介绍。

        以上几乎都是废话,我自己的理解就是通过P3P 可以使 用户自己指定浏览器的隐私策略。而这里只用到了关于cookie的一些设置。

         我们打开ie浏览器->工具->internet选项->隐私分页 用户可以通过手工 “导入” 用户隐私策略文件

        PHP使用P3P来跨域跟踪的示例

        首先修改Windows文件,将要测试的两个域名进行指向。

  • 127.0.0.1 www.a.com
  • 127.0.0.1 www.b.com
  •     第一步:创建 a_setcookie.php 文件,内容如下:

        第二部:创建 a_getcookie.php 文件,内容如下:

        第三部:创建 b_setcookie.php 文件,内容如下:

        三个文件创建完毕后,我们通过浏览器依次访问:

  • http://www.b.com/b_setcookie.php
  • http://www.a.com/a_getcookie.php
  •     我们会发现,在访问b.com域的时候,我们并没有在a.com域设置上cookie值。

        然后我们修改一下a_setcookie.php文件,去掉注释符号,a_setcookie.php即为:

        再次通过浏览器依次访问:

  • http://www.b.com/b_setcookie.php
  • http://www.a.com/a_getcookie.php
  •     这次,你会发现在访问b.com域的时候,我们设置了a.com域的cookie值。

        其他Cookie相关知识

  • cookies是暂存在电脑里的.txt格式的文本文件。
  • 一台电脑的所有用户,用记事本都可以看到暂存的Cookie。
  • 只有访问的站点能够建立获取first-party cookies。
  • 访问的站点可以允许其他域名浏览cookie信息。
  • 电脑内的信息不会因为cookies受任何影响,你可以随时手动删除。
  • cookies文件大小限制为4k。
  • 各浏览器对cookie的限制不同,IE8和Firefox为50个,Opera为30个。
  •     参考资料

  • HTTP cookie-Wikipedia
  • How Internet Cookies Work-howstuffworks
  • Cookie FAQ-cookiecentral
  • 建议继续学习

    1. cookie窃取和session劫持 (阅读 14,425)
    2. curl 命令使用cookie (阅读 9,845)
    3. 前端开发中Cookie那些事儿 (阅读 7,207)
    4. 如何设置一个永远无法删除的Cookie (阅读 6,263)
    5. 在浏览器中加密Cookie (阅读 5,384)
    6. 网站统计中的数据收集原理及实现 (阅读 4,722)
    7. Cookie安全漫谈 (阅读 4,542)
    8. 一段Javascript的代码 (阅读 4,182)
    9. 使用Http-only Cookie来防止XSS攻击 (阅读 3,903)
    10. js制作提示公告带关闭可保存cookie (阅读 3,845)