具体来说

cookie

机制采用的是在客户端保持状态的方案,

session

机制采用的是在服务器端保持状态的方案。

同时我们也看到,

由于采

用服务器端保持状态的方案在客户端也需要保存一个标识,所以

session

机制可能需要借助于

cookie

机制来达到保存标识的目的,

实际上它还有其他选择。

cookie

机制。正统的

cookie

分发是通过扩展

HTTP

协议来实现

的,

服务器通过在

HTTP

的响应头中加上一行特殊的指示以提示浏览

器按照指示生成相应的

cookie

然而纯粹的客户端脚本如

JavaScript

或者

VBScript

也可以生成

cookie

cookie

的使用是由浏览器按照

一定的原则在后台自动发送给服务器的。浏览器检查所有存储的

cookie

,如果某个

cookie

所声明的作用范围大于等于将要请求的资

源所在的位置,则把该

cookie

附在请求资源的

HTTP

请求头上发送

给服务器。

cookie

的内容主要包括:名字,值,过期时间,路径和域。路径

与域一起构成

cookie

的作用范围。若不设置过期时间,则表示这个

cookie

的生命期为浏览器会话期间,关闭浏览器窗口,

cookie

就消

失。这种生命期为浏览器会话期的

cookie

被称为会话

cookie

。会话

cookie

一般不存储在硬盘上而是保存在内存里,

当然这种行为并不是

规范规定的。若设置了过期时间,浏览器就会把

cookie

保存到硬盘

上,关闭后再次打开浏览器,这些

cookie

仍然有效直到超过设定的

过期时间。

存储在硬盘上的

cookie

可以在不同的浏览器进程间共享,

为什么会有cookie呢,大家都知道,http是无状态的协议,客户每次读取web页面时,服务器都打开新的会话,而且服务器也不会自动维护客户的上下文信息,那么要怎么才能实现网上商店中的购物车呢,session就是一种保存上下文信息的机制,它是针对每一个用户的,变量的值保存在服务器端,通过SessionID来区分不同的客户,session是以cookie或URL重写为基础的,默认使用cookie来实现,系统会创造一个名为JSESSIONID的输出cookie,我们叫做session cookie,以区别persistent cookies,也就是我们通常所说的cookie,注意session cookie是存储于浏览器内存中的,并不是写到硬盘上的,这也就是我们刚才看到的JSESSIONID,我们通常情是看不到JSESSIONID的,但是当我们把浏览器的cookie禁止后,web服务器会采用URL重写的方式传递Sessionid,我们就可以在地址栏看到sessionid=KWJHUG6JJM65HS2K6之类的字符串。 明白了原理,我们就可以很容易的分辨出persistent cookies和session cookie的区别了,网上那些关于两者安全性的讨论也就一目了然了,session cookie针对某一次会话而言,会话结束session cookie也就随着消失了,而persistent cookie只是存在于客户端硬盘上的一段文本(通常是加密的),而且可能会遭到cookie欺骗以及针对cookie的跨站脚本攻击,自然不如session cookie安全了。 通常session cookie是不能跨窗口使用的,当你新开了一个浏览器窗口进入相同页面时,系统会赋予你一个新的sessionid,这样我们信息共享的目的就达不到了,此时我们可以先把sessionid保存在persistent cookie中,然后在新窗口中读出来,就可以得到上一个窗口SessionID了,这样通过session cookie和persistent cookie的结合我们就实现了跨窗口的session tracking(会话跟踪)。 在一些web开发的书中,往往只是简单的把Session和cookie作为两种并列的http传送信息的方式,session cookies位于服务器端,persistent cookie位于客户端,可是session又是以cookie为基础的,明白的两者之间的联系和区别,我们就不难选择合适的技术来开发web service了