Cookie 与 Session 都是来完成一次会话内多次请求间数据共享的(解决 http 无状态问题)。
一、Cookie
存储在客户端浏览器中,默认情况下保存在浏览器内存中,浏览器关闭,Cookie自动销毁。可以设置有效期,可以长期有效。
setMaxAge(int seconds)
进行 Cookie 的生命周期。
正数:将 Cookie 写入磁盘中持久化,到期自动删除。
负数:默认值,浏览器关闭,Cookie自动销毁。
零:删除对应的 Cookie。
默认情况下,浏览器不关闭,Cookie一直有效。
二、Session
存在在服务端中,在服务端关闭时,进行钝化,持久化至服务端硬盘上,默认有效期30分钟(可根据配置修改)。Session 是基于 Cookie 实现的,针对每一次会话,产生对应的会话 ID。
服务端在第一次初始化Session 时给客户端浏览器携带 set-cookie 字段(JSESSIONID),客户端保存JSESSIONID,后续请求将继续携带。
Cookie 与 Session 都是来完成一次会话内多次请求间数据共享的(解决 http 无状态问题)。
三、对比:
- 存储位置:Cookie存储在客户端中(可持久化至硬盘),Session存储在服务端中(Session钝化将数据持久化至硬盘,Session活化进行读取)。
- 安全性:Cookie不安全,Session安全。
- 数据大小:Cookie最大为 3KB,Session无大小限制。
- 存储时间:Cookie可以长期存储,Session默认为 30 分钟。
- 服务器性能:Cookie不占用服务器资源,Session占用服务器资源。