Cookie和Session
概述
由于HTTP协议是无状态的协议,需要用某种机制来识别具体的用户身份,用来跟踪用户的整个会话。常用的会话追踪技术是cookie和session。
Cookie
cookie 就是由服务器发送给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息。
具体的说:当用户使用浏览器访问一个支持cookie的网站的时候,用户会提供包括用户名在内的个人信息并且提交至服务器;接着,服务器向客户端回传相应的超文本的同时也会发回这些个人信息,当然这些信息并不是存放在HTTP响应体中的,而是存放于HTTP响应头;当客户端浏览器接收到来自服务器的响应之后,浏览器会将这些信息存放在一个统一的位置。自此,客户端再向服务器发送请求的时候,都会把相应的cookie存放在HTTP请求头中,再次发回服务器。服务器在接收到来自客户端浏览器的请求后,就能够通过分析存放在请求头的cookie得到客户端特有的信息,从而动态生成与该客户端相对应的内容。
cookie的工作流程
- servlet创建cookie,保存少量数据,发送给浏览器。
- 浏览器获取服务器发送的cookie数据,将自动的保存到浏览器端。
- 下次访问时,浏览器将自动携带cookie数据发送给服务器。
Session
首先浏览器请求服务器访问web站点时,服务器首先会检查这个客户端请求是否已经包含了一个session标识、称为sessionid
,如果已经包含了一个sessionid
,则说明以前已经为此客户端创建过session,服务器就按照sessionid
把这个session检索出来使用;如果客户端请求不包含sessionid
,则服务器为此客户端创建一个session,并且生成一个与此session相关联的独一无二的sessionid
存放到cookie中,这个sessionid
将在本次响应中返回到客户端保存,这样交互的过程中,客户端每次请求时,都会带着这个sessionid
,服务器根据这个sessionid
就可以找到对应的session。以此来达到共享数据的目的。session不会随着浏览器的关闭而死亡,而是等待超时时间。
Cookie和Session的区别
- 作用范围不同,Cookie保存在客户端,Session保存在服务器端
- 有效期不同,Cookie可设置为长时间保存,比如经常使用的默认登录功能,Session一般时效较短,客户端关闭或者Session超时都会失效。
- 隐私策略不同,Cookie保存在客户端,容易被窃取;Session保存在服务端,安全性相对较好。
- 存储大小不同,单个Cookie保存的数据不能超过4K;对于Session来说存储没有上限,但出于对服务器的性能考虑,Session内不要存放过多的数据,并且需要设置Session删除机制。