一.Cookie
定义: 保存在浏览器端,Cookie 是浏览器提供的持久化存储数据的机制,是服务器保存在浏览器中的片段,服务器通过Http 响应的 set-Cookie 字段把键值对返回给客户端( Cookie 在浏览器中以 (key,value) 的形式保存),在后续浏览器访问服务器时带到请求的 header 中返回给服务器.
目的: Cookie 的目的是把无状态的 Http 请求转换为有状态的 Http 请求.
上述图中针对登录操作服务器会进行查询数据库,验证登录信息是否正确.如果成功会把登录信息在内存中保存一份,同时给用户分配一个身份序号,把序号作为 key 身份信息作为 value 存储.
通过 setCookie 返回身份序号,然后浏览器就保存了 Cookie .如果再次访问服务器其他页面,服务器就会根据身份序号查询用户是谁(避免了重复输入账户密码).
注意: Cookie 也是会过期的,当 Cookie 存储超过指定时间的时候就会过期,过期后下次登陆就要重新输入账户密码.
Cookie设定过期原因: 假设如果在一个公共的电脑上登陆了一个服务器,但是在下机的时候,没有注销 Cookie ,那么下次另一个人登陆这台电脑的时候就也可以使用你的账户密码了,这是非常不安全的,所以才要设定过期时间.
二.Session
定义: Session 主要保存在服务器端,一般来说要配合 Cookie 使用,如果用户浏览器禁用了 Cookie,那么只能使用 URL 重写来实现 Session 的存储功能.
Session 类似于上述 Cookie 中服务器里存储的身份序号,在服务器中以 hash 表形式存储.当客户端请求服务器时如果服务器里没有 SessionId 就会创建一个 HttpSession 对象,对象里的键和值存储一些用户信息,如果有就遍历服务器 Session 文件,找到这个文件.此后的请求都会交换这个SessionId.
三.Cookie和Session的区别
存储位置上:Cookie存储在客户端上. Session存储在服务器上.
安全上:Session的安全程度比Cookie安全度更高.
数据存储大小:单个Cookie保存的数据不能超过4K,很多浏览器一般都限制一个站点最多保存20个Cookie.而Session存储于服务端,浏览器对其没有限制。
性能方面:Session一般保存服务器上,当访问增多时会比较占用服务器性能,在考虑性能方面应使用Cookie.