28、Cookie与Session的对比

HTTP作为无状态协议,必然需要在某种方式保持连接状态。这里简要介绍一下Cookie和Session。

Cookie

Cookie是客户端保持状态的方法。

Cookie简单的理解就是存储由服务器发至客户端并由客户端保存的一段字符串。为了保持会话,服务 器可以在响应客户端请求时将Cookie字符串放在Set-Cookie下,客户机收到Cookie之后保存这段字符 串,之后再请求时候带上Cookie就可以被识别。

除了上面提到的这些,Cookie在客户端的保存形式可以有两种,一种是会话Cookie一种是持久 Cookie,会话Cookie就是将服务器返回的Cookie字符串保持在内存中,关闭浏览器之后自动销毁,持 久Cookie则是存储在客户端磁盘上,其有效时间在服务器响应头中被指定,在有效期内,客户端再次 请求服务器时都可以直接从本地取出。需要说明的是,存储在磁盘中的Cookie是可以被多个浏览器代 理所共享的。

Session

Session是服务器保持状态的方法。

首先需要明确的是,Session保存在服务器上,可以保存在数据库、文件或内存中,每个用户有独立的 Session用户在客户端上记录用户的操作。我们可以理解为每个用户有一个独一无二的Session ID作为 Session文件的Hash键,通过这个值可以锁定具体的Session结构的数据,这个Session结构中存储了用 户操作行为。

当服务器需要识别客户端时就需要结合Cookie了。每次HTTP请求的时候,客户端都会发送相应的Cookie 信息到服务端。实际上大多数的应用都是用Cookie来实现Session跟踪的,第一次创建Session的时候,服 务端会在HTTP协议中告诉客户端,需要在Cookie里面记录一个Session ID,以后每次请求把这个会话ID 发送到服务器,我就知道你是谁了。如果客户端的浏览器禁用了Cookie,会使用一种叫做URL重写的技 术来进行会话跟踪,即每次HTTP交互,URL后面都会被附加上一个诸如sid=xxxxx这样的参数,服务端 据此来识别用户,这样就可以帮用户完成诸如用户名等信息自动填入的操作了。