最详细的cookie和浏览隐私之间的关系

本文所说的"cookie",指的是浏览器相关的 cookie(也叫"HTTP cookie")。

浏览器 cookie 的主要功能是:帮助网站保存一些小片段的信息。比如,你曾经在自己的浏览器上登录过某个论坛,下次你再打开论坛的登录页面,你会发现用户名已经帮你填好 了,你只需要输入口令即可。那么,这个登录页面是如何知道你上次登录用的账户名捏?奥妙就在于:该网站在你的浏览器端保存了一个 cookie,里面包含了你上次登录使用的帐号名称。

Cookie 的技术实现

本章节面向懂技术的网友。不太懂技术的读者,可以略过本节,直接进入下一章节,以免浪费时间。

网站如何设置 cookie(写操作)

1、当你在浏览器中点某个书签、或者在浏览器地址栏输入某个网址,浏览器会向对应的网站发起一个 HTTP 请求(术语是 HTTP Request)。

2、然后,网站的服务器收到这个 HTTP 请求之后,会把相应的内容(比如网页、图片、等)发回给浏览器(这称为 HTTP 响应,术语是 HTTP Reponse)。

如果网站想设置 cookie,就在发回的 HTTP Response 中,包含一个设置 cookie 的指令。举例如下:

Set-Cookie: user=xxxx; Path=/; Domain=www.example.com

上述这个例子中,设置了一个 cookie。这个 cookie 的"名"是 user;cookie 的"值"是 xxxx;cookie 绑定的域名是 www.example.com

3、浏览器在收到这个指令后,就会在你的电脑中存储该 cookie 的信息。

网站如何获取 cookie(读操作)

假设过了几天之后,你再次访问上述的 www.example.com 网站(在上次的访问中,已经被设置过 cookie 了)。这时候,浏览器发现该网址已经有对应的 cookie,就会把 cookie 的信息放在 HTTP Request 中,然后发送到网站服务器。具体的指令如下:

Cookie: user=xxxx

网站服务器拿到这个 HTTP Request 之后,就可以通过上述信息,知道 cookie 的"名"和"值"。

Cookie 的特点

存储信息量小

cookie 在洋文中的意思就是:小甜饼、曲奇饼。这个单词其实已经暗示了 cookie 技术所能存储的信息量是比较小滴。
从刚才的技术实现机制可以看出,cookie 只能用来存储纯文本信息,而且存储的内容不能太长——因为 Cookie 的读写指令受限于 HTTP Header 的长度。
但是,cookie 的信息量虽小,能耐却很大哦。请看下面的例子。

举例

比如某个网站上有很多网页,每个网页上有很多广告。该网站想要收集:每一个访客点击了哪些广告。

由于这些信息量比较大,直接存储在 cookie 里可能放不下。所以,网站通常是在 cookie 中保存一个唯一的用户标识。然后把用户的点击信息(包括在哪个时间点击哪个广告)都存储在服务器上。

下次你再访问该网站,网站先拿到 cookie 中的用户标识,因为这个标识具有唯一性,那么就可以根据该标识,从网站服务器上查出该用户的详细信息。

绑定到域名和路径

从上述的实现机制可以看出,cookie 是跟 HTTP Request 对应的网址(域名和路径)相关的。

所以,不同域名的网站设置的 cookie 是互相独立的(隔离的)。这一点由浏览器来保证,以确保安全性。

补充一下:cookie 绑定的域名可以是小数点开头的。举例如下:

Set-Cookie: user=xxxx; Path=/; Domain=.example.com

这个指令设置的 cookie,可以被 example.com 的所有下级域名读取(比如 www.example.com 或 ftp.example.com)。

Cookie 的类型

第一方 Cookie VS 第三方 Cookie

首先来说说"第一方"和"第三方" Cookie 的区别,因为这跟隐私的关系比较密切。

要说清楚 "第一方 Cookie" 和 "第三方 Cookie" 的差别,俺来举个例子。

举例

打个比方,你上新浪去看新闻,并且新浪的网页上嵌入了阿里巴巴的广告(假设新浪的页面和嵌入的广告都会设置 cookie)。那么,当你的浏览器加载完整个页面之后,浏览器中就会同时存在新浪网站的 cookie 和 阿里巴巴网站的 cookie。这时候,新浪网站的 cookie 称为"第一方 Cookie"(因为你访问的就是新浪嘛),相对的,阿里巴巴的 cookie 称为"第三方 Cookie"(因为你访问的是新浪,阿里巴巴只是不相干的第三方)

内存型 VS 文件型

根据存储方式的不同,分为两类:基于内存的 Cookie 和 基于文件的Cookie。基于内存的 cookie,当浏览器关闭之后,就消失了;而基于文件的 cookie,即使浏览器关闭,依然存在于硬盘上。和隐私问题相关的 cookie,主要是第二类(基于文件的Cookie)。

Cookie 有啥正经用途?

今年的315晚会,央视猛烈抨击了 cookie 的隐私问题,搞得好像 cookie 是洪水猛兽一般。央视对 cookie 的宣传,典型是用来吓唬不懂技术的外行。其实捏,cookie 是有利有弊的。cookie 之所以应用这么广泛,因为它本身确实是很有用的。请看下面的几个例子。

举例1——自动登录

目前很多基于 Web 的邮箱,都有自动登录功能。也就是说,你第一次打开邮箱页面的时候,需要输入用户名和口令;过几天之后再来打开邮箱网页,就不需要再次输入用户名和口令了(比如 Gmail 和 Hotmail 就是这样的)。

为啥邮箱可以做到自动登录,就是因为邮箱的网站在你的浏览器中保存了 cookie,通过 cookie 中记录的信息来表明你是已登录用户。

举例2——提供个性化界面

比如某个论坛允许匿名用户设置页面的字体样式和字体大小。那么,该论坛就可以把匿名用户设置的字体信息保存在 cookie 中,下次你用同一个浏览器访问该论坛,自动就帮你把字体设置好了。

小结

一般来说,有正经用途的 cookie,大都是"第一方 Cookie";至于"第三方 Cookie",大部分是用来收集广告信息和用户行为的。

Cookie 如何泄漏隐私?

cookie 就像一把双刃剑,有很多用途,但也有弊端。一个主要的弊端就是隐私问题。

举例1

假如你同时使用 Google 的 Gmail 和 Google 的搜索(很多 Google 用户都这么干)。当你登录过 Gmail 之后,cookie 中会保存你的用户信息(标识你是谁);即使你在 Gmail 中点了注销(logout),cookie 中还是会有你的用户信息。之后,你再用 Google 的搜索功能,那么 Google 就可以通过 cookie 中的信息,知道这些搜索请求是哪个 Gmail 用户发起的。

可能有些同学会问,Gmail 和 Google 搜索,是不同的域名,如何共享 cookie 捏?俺前面有介绍过,某些 cookie 绑定的域名是以小数点开头的,也就是说,这类 cookie 可以被所有下级域名读取。因为 Gmail 的域名是 mail.google.com,而 Google 搜索的域名是 www.google.com。所以这两者都可以读取绑定在 .google.com 的 cookie!

注:俺拿 Google 来举例是因为俺博客的读者,大部分都是 Google 用户。其实不光 Google 存在此问题,百度、腾讯、阿里巴巴、奇虎360、等等,都存在类似问题(这几家都有搜索功能,也都有自己的一套用户帐号体系)。

举例2

很多网站会利用 cookie 来追踪你访问该网站的行为(包括你多久来一次,每次来经常看哪些页面,每个页面的停留时间),这样一来,网站方面就可以根据这些数据,分析你的个人的种种偏好(这就涉及到个人隐私)。

请注意:利用 cookie 收集个人隐私的把戏有很多,俺限于篇幅,仅列出上述两例。

始终用隐私浏览模式

关于"隐私浏览模式",在本系列的前一篇已经介绍过了,此处不再啰嗦。

在隐私浏览模式下,浏览器关闭之后,期间所有的 cookie 都消失。

但是,这样设置也可能带来一些不方便之处(安全性和方便性通常是截然对立)。你可能要先尝试一段时间,看看自己能否忍受这种模式。

小结

刚才介绍的几招,都是针对单个浏览器 。大部分情况下是够用了。但是某些特殊情况,还是会搞不定。

比如:你经常用 Gmail,而且依赖于 Gmail 的自动登录。这时候,你就不能禁用 .google.com 域名下的 cookie(禁用了就无法自动登录 Gmail)。

但是,你在用 Google 搜索的时候,又不希望让 Google 知道你是谁。咋办捏?请听下回分解——用多浏览器搭配不同的招数。

时间: 2024-10-14 00:37:46

最详细的cookie和浏览隐私之间的关系的相关文章

IP/PV/UV的定义以及三者之间的关系

第一.IP.PV和UV分别是什么意思? IP,实际上也就是指独立IP,它的英文为Internet ***otocol,是独立IP数的意思.00:00—24:00相同IP地址记录一次.即使你有多台电脑,但是如果IP地址是一样的,那么也只能算是一个IP的访问,IP数据依然为1. PV,也就是指访问量,它的英文是Page View,具体是指网站的是页面浏览量或者点击量,页面被刷新一次就计算一次.如果网站被刷新了1000次,那么流量统计工具显示的PV就是1000 . UV,它是独立访客的意思,英文为Un

JavaScript和Java之间的关系

今天来简单而又详细地说说JavaScript和Java的关系. 开门见山总结性一句话,它们之间的关系 = 雷锋和雷峰塔之间的关系,换句话说:它们之间没什么关系. 但往往有不少初学者甚至中级者认为它们之间有密切的关系,这很让人无语. 个人认为如果不分辨清楚,Java学得越好的初学者,对于JavaScript就会学得越糟.因为在一张白纸上好画图,在一张花纸上就很难再画图了. 比较 JavaScript Java 诞生时间 1995年 1995年 曾用名 Mocha, LiveScript Oak 母

3.5 盒子之间的关系

读者要理解前几节的内容并不困难,因为都只涉及一个盒子内部的关系.而实际网页往往是很复杂的,一个网页可能存在着大量的盒子,并且它们以各种关系相互影响着. 要把一个盒子与外部的其他盒子之间的关系理解清楚,并不是简单的事情.在很多CSS资料中大都通过简单的分类,就CSS本身的介绍来说明这个问题,往往只是就事论事.如果不能从站得更高的角度来理解这个问题,那么想真正搞懂它是很困难的,因此这里尝试从更深入的角度来介绍CSS与HTML的关系,希望对读者的理解有所帮助. 为了能够方便地组织各种盒子有序的排列和布

转:C#综合揭秘——细说进程、应用程序域与上下文之间的关系

原文:http://www.cnblogs.com/leslies2/archive/2012/03/06/2379235.html 本文主要是介绍进程(Process).应用程序域(AppDomain)..NET上下文(Context)的概念与操作.虽然在一般的开发当中这三者并不常用,但熟悉三者的关系,深入了解其作用,对提高系统的性能有莫大的帮助.在本篇最后的一节当中将会介绍到三者与线程之间的关系,希望对多线程开发人员能提供一定的帮助. 一.进程的概念与作用 进程(Process)是Windo

[转] valuestack,stackContext,ActionContext.之间的关系

三者之间的关系如下图所示: ActionContext  一次Action调用都会创建一个ActionContext  调用:ActionContext context = ActionContext.getContext() ValueStack 由OGNL框架实现  可以把它简单的看作一个List Stack Object:放入stack中的对象,一般是action. Stack Context(map):stack上下文,它包含一些列对象,包括request/session/attr/ap

每天进步一点点——Linux中的文件描写叙述符与打开文件之间的关系

转载请说明出处:http://blog.csdn.net/cywosp/article/details/38965239 1. 概述 在Linux系统中一切皆能够看成是文件,文件又可分为:普通文件.文件夹文件.链接文件和设备文件.文件描写叙述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引.其是一个非负整数(一般是小整数),用于指代被打开的文件.全部运行I/O操作的系统调用都通过文件描写叙述符.程序刚刚启动的时候.0是标准输入,1是标准输出,2是标准错误. 假设此

(原创)c#学习笔记08--面向对象编程简介02--OOP技术04--对象之间的关系

8.2.4  对象之间的关系 继承是对象之间的一种简单关系,可以让派生类完整地获得基类的特性,而派生类也可以访问基类内部的一些工作代码(通过受保护的成员). 对象之间还有其他一些重要关系. 本节简要讨论下述关系: 包含关系:一个类包含另一个类.这类似于世承关系,但包含类可以控制对被包含类的成员的访问,甚至在使用被包含类的成员前进行其他处理. 集合关系:一个类用作另一个类的多个实例的容器.这类似于对象数组,但集合有其他功能,包括索引.排序和重新设置大小等. 1. 包含关系 用一个成员字段包含对象实

java集合之间的关系及实现细节——Set与Map

   首先,先谈一下Set和Map的一些特性及体系结构: 1.1 Set和Map Set代表一种无序的.元素不可重复的集合.Map则代表是一种key-value对组成的集合,Map集合类似于传统的关联数组.表面上看它们之间的关系的相似性很少,实则Map和Set之间有着莫大的关联,可以这样说Map集合实则是Set集合的扩展. 至于为什么是Set是一种无序的.元素不可重复的集合:Map集合类似传统的关系数组.理解这个非常重要,这个我在后面会进行补充说明. 1.2 Set和Map之间的关系 先看看Se

事实表,维度,度量,指标之间的关系

事实表:每个数据仓库都包含一个或者多个事实数据表.事实数据表可能包含业务销售数据,如销售商品所产生的数据,与软件中实际表概念一样 维度:说明数据,维度是指可指定不同值的对象的描述性属性或特征.例如,地理位置的维度可以包括"纬度"."经度"或"城市名称"."城市名称"维度的值可以为"旧金山"."柏林"或"新加坡". 指标:衡量数据,指标是指可以按总数或比值衡量的具体维度