本文概要的讲解了 Cookie 的起源和根本属性, 为学些 PHP 设置 Cookie 提供技术背景, 推荐 PHP 新手一看.
在学习 PHP 如何设置 Cookie 之前我们先来了解下 Cookie 技术.
(1)Cookie 技术简介
在 web 技术发展史上, Cookie 技术的出现是一个重大的变革. 最先是 Netscape 在它的 Netscape Navigator 浏览器中引入了 Cookie 技术, 从那时起, World Wide Web 协会就开始支持 Cookie 标准. 以后又经过微软的大
力推广 (因为微软的 IIS Web 服务器所采用的 ASP 技术很大程度的使用了 Cookie 技术), 即在微软的 Internet Explorer 浏览器中完全支持 Cookie 技术. 到现在, 绝大多数的浏览器都支持 Cookie 技术, 或者至少兼容 Cookie
技术的使用.
1) 什么是 Cookie?
按照 Netscape 官方文档中的定义, Cookie 是在 HTTP 协议下, 服务器或脚本可以维护客户工作站上信息的一种方式. Cookie 是由 Web 服务器保存在用户浏览器上的小文本文件, 它可以包含有关用户的信息 (如身份
识别号码, 密码, 用户在 Web 站点购物的方式或用户访问该站点的次数). 无论何时用户链接到服务器, Web 站点都可以访问 Cookie 信息.
通俗地讲, 浏览器用一个或多个限定的文件来支持 Cookie. 这些文件在使用 Windows 操作系统的机器上叫做 Cookie 文件, 在 Macintosh 机器上叫做 magic Cookie 文件, 这些文件被网站用来在上面存储 Cookie 数据.
网站可以在这些 Cookie 文件中插入信息, 这样对有些网络用户就有些副作用. 有些用户认为这造成了对个人隐私的侵犯, 更糟的是, 有些人认为 Cookie 是对个人空间的侵占, 而且会对用户的计算机带来安全性的危害.
目前有些 Cookie 是临时的, 另一些则是持续的. 临时的 Cookie 只在浏览器上保存一段规定的时间, 一旦超过规定的时间该 Cookie 就会被系统清除. 例如在 PHP 中 Cookie 被用来跟踪用户进程直到用户离开网站. 持续
的 Cookie 则保存在用户的 Cookie 文件中, 下一次用户返回时, 仍然可以对它进行调用.
在 Cookie 文件中保存 Cookie, 一些用户会过分地认为这将带来很大的问题. 主要是有些用户担心 Cookie 会跟踪用户网上冲浪的习惯, 譬如用户喜爱到那些类型的站点, 爱从事些什么活动等. 害怕这种个人信息一
旦落入一些别有用心的家伙手中, 那么个人也就可能成为一大堆广告垃圾的对象, 甚至遭到意外的损害. 不过, 这种担心压根儿不会发生, 因为网站以外的用户是无法跨过网站来获得 Cookie 信息的. 所以想以这种目
的来应用 Cookie 是不可能的. 不过, 由于一些用户错误的理解以及 "以讹传讹", 一些浏览器开发商别无选择, 只好作出相识的响应 (例如 Netscape Navigator4.0 和 Internet Explorer3.0 都提供了屏蔽 Cookie 的选
项).
对 Cookie 技术期待了这么久的结果是, 迫使许多浏览器开发商在它们的浏览器中提供了对 Cookie 的灵活性控制功能. 例如, 目前的两大主流浏览器 Netscape Navigator 和 Internet Explorer 是这样处理 Cookie
的: Netscape Navigator4.0 不但可以接受 Cookie 进行警告, 而且还可以屏蔽掉 Cookie;InternetExplorer3.0 也可以屏蔽 Cookie, 但在 Internet Explorer4.0 中就只能进行接受警告而没有提供屏蔽选项, 不过在 Internet
Explorer4.0 之后的更新版本中又加入了屏蔽 Cookie 的功能选项.
此外, 很多最新的技术甚至已经可以在不能屏蔽 Cookie 的浏览器上进行 Cookie 的屏蔽了. 例如, 可以通过将 Cookie 文件设置成不同的类型来限制 Cookie 的使用. 但是, 非常不幸地是, 要是你想完全屏蔽 Cookie 的
话, 肯定会因此拒绝许多的站点页面. 因为当今已经有许多 Web 站点开发人员爱上了 Cookie 技术的强大功能, 例如 Session 对象的使用就离不开 Cookie 的支持.
尽管今天仍有一些网络用户对于 Cookie 的争论乐此不倦, 但是对于绝大多数的网络用户来说还是倾向于接受 Cookie 的. 因此, 我们尽可以放心地使用 Cookie 技术来开发我们的 Web 页面.
2)Cookie 是怎样工作的?
要了解 Cookie, 必不可少地要知道它的工作原理. 一般来说, Cookie 通过 HTTP Headers 从服务器端返回到浏览器上. 首先, 服务器端在响应中利用 Set-Cookie header 来创建一个 Cookie , 然后, 浏览器在它的请
求中通过 Cookie header 包含这个已经创建的 Cookie, 并且反它返回至服务器, 从而完成浏览器的论证.
例如, 我们创建了一个名字为 login 的 Cookie 来包含访问者的信息, 创建 Cookie 时, 服务器端的 Header 如下面所示, 这里假设访问者的注册名是 "Michael Jordan", 同时还对所创建的 Cookie 的属性如 path,
domain,expires 等进行了指定.
- Set-Cookie:login=Michael Jordan;path=/;domain=msn.com;
- expires=Monday,01-Mar-99 00:00:01 GMT
上面这个 Header 会自动在浏览器端计算机的 Cookie 文件中添加一条记录. 浏览器将变量名为 "login" 的 Cookie 赋值为 "Michael Jordon". 注意, 在实际传递过程中这个 Cookie 的值是经过了 URLEncode 方法的
URL 编码操作的. 这个含有 Cookie 值的 HTTP Header 被保存到浏览器的 Cookie 文件后, Header 就通知浏览器将 Cookie 通过请求以忽略路径的方式返回到服务器, 完成浏览器的认证操作.
此外, 我们使用了 Cookie 的一些属性来限定该 Cookie 的使用. 例如 Domain 属性能够在浏览器端对 Cookie 发送进行限定, 具体到上面的例子, 该 Cookie 只能传达室到指定的服务器上, 而决不会跑到其他的如 http://www.phpq.net/ 的 Web 站点上去. Expires 属性则指定了该 Cookie 保存的时间期限, 例如上面的 Cookie 在浏览器上只保存到 1999 年 3 月 1 日 1 秒. 当然, 如果浏览器上 Cookie 太多, 超过了系统所允许的范围, 浏览器将自动对
它进行删除. 至于属性 Path, 用来指定 Cookie 将被发送到服务器的哪一个目录路径下.
说明: 浏览器创建了一个 Cookie 后, 对于每一个针对该网站的请求, 都会在 Header 中带着这个 Cookie; 不过, 对于其他网站的请求 Cookie 是绝对不会跟着发送的. 而且浏览器会这样一直发送, 直到 Cookie 过期为止. Cookie 技术是一个非常有争议的技术, 自经诞生它就成了广大网络用户和 Web 开发人员的一个争论焦点. 有一些网络用户, 甚至包括一些资深的 Web 专家也对它的产生和推广感到不满, 这倒不是因为 Cookie 技术的功能太弱或别的技术性能上的原因, 而仅仅是因为他们觉得 Cookie 的使用, 对网络用户的隐私构成了危害. 因为 Cookie 是由 Web 服务器保存在用户浏览器上的小文本文件, 它包含有关用户的信息 (如身份
识别号码, 密码, 用户在 Web 站点上购物的方式或用户访问该站点的次数). 那么 Cookie 技术究竟怎样呢? 是否真的给网络用户带来了个人隐私的危害呢? 看了上面的资料您心中应该有个度量了吧.