一.cookie
cookie是客户端浏览器用来保存服务端数据的一种机制,当我们通过浏览器去进行网页访问的时候,服务器可以将某一些状态数据以key-value的形式写入到cookie里面,存储到客户端浏览器,然后客户端下一次再访问服务器的时候我们可以携带一些状态数据发送到服务器端,服务器端可以根据cookie里面携带的内容去识别使用者.
二.session
session表示一个会话,属于服务器端的一个容器对象,默认情况下,他会针对每一个浏览器的请求,Servlet容器都会分配一个session对象,session的本质上我们认为他是一个ConcurrentHashMap,他可以用来存储当前会话产生的一些状态数据.
三.Cookie 和 Session 的区别
- 安全性: Session 比 Cookie 安全,Session 是存储在服务器端的,Cookie 是存储在客户端。
- 存取值的类型不同:Cookie 只支持存字符串数据,Session 可以存任意数据类型。
- 有效期不同: Cookie 可设置为长时间保持,比如我们经常使用的默认登录功能,Session 一般失效时间较短,客户端关闭(默认情况下)或者 Session 超时都会失效。
- 存储大小不同: 单个 Cookie 保存的数据不能超过 4K,Session 可存储数据远高于 Cookie,但是当访问量过多,会占用过多的服务器资源。
由于HTTP协议是一个无状态协议,服务器端并不知道客户端发过来的多次请求是属于同一个用户,所以session是用来弥补HTTP无状态的一个不足.服务器端可以利用session来存储客户端在同一个会话里面产生的多次请求的记录,那么基于服务器端的session的存储机制,再结合客户端的cookie机制,就可以实现一个有状态的HTTP协议.
工作原理:
总的来看,cookie是客户端的存储机制,而session是服务器端的存储机制.