Cookie和Session的区别

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

因为HTTP协议是无状态的,每次同一浏览器向服务器请求时,服务器都会将该请求视为新的请求,所以需要使用会话跟踪技术去实现同一会话内数据共享,比如cookie和session。

一、存储位置

  1. cookie的数据信息存放在客户端浏览器中。
  2. session的数据信息存放在服务器上。

二、存储容量

  1. 单个cookie保存的数据<=4KB,一个站点一般保存20~50个Cookie(不同浏览器不一样,Sarafi和Chrome对每个域的的Cookie没有严格限制)。
  2. 对于session来说并没有上限,受限于服务器内存。

三、存储方式

  1. cookie只能存储字符串数据。
  2. session可以存储任何类型的数据。

四、隐私策略

  1. cookie对客户端是可见的,每次请求敏感信息都需要携带在请求头中在http中传输,http是明文传输容易被攻击劫持。
  2. session存储在服务器上,不存在敏感信息泄漏风险(JSESSION是以cookie的形式存储在浏览器上,请求时携带在请求头中以http明文传输被截获也没什么影响,因为敏感数据是在服务器上)。

五、拓展

5.1 实现方式不同

  1. cookie基于HTTP协议实现的。浏览器向服务器发送请求之后,服务器会创建cookie对象并且把数据设置在响应头中返回给浏览器,浏览器之后的请求都会在请求头中带上cookie数据。
  2. session基于cookie实现的。浏览器想服务器发送请求之后,服务器创建session对象,session里面的数据会存放在服务器中,并且把JSESSION(每个session的标识id)以cookie的方式设置在响应头中返回给浏览器,浏览器把这个JSESSION存储在浏览器内存中,浏览器之后的请求都会在请求头上携带这个JSESSION,服务器才会根据这个session id 去找存储在服务器上的数据。

5.2 有效期

  1. cookie默认存活时间是浏览器关闭时销毁(setMaxAge为负数时,默认为setMaxAge(-1)),但是可以通过setMaxAge(单位:秒)持久化存储在电脑硬盘,到期自动删除。
  2. session的默认存活是30分钟,可以在web.xml中配置session-config的seesion-timeout属性(单位为分钟),也可以调用session.invalidate()方法立即销毁。session的存活时间还与存储在浏览器的JSESSION有关,如果JESSION存活时间为浏览器关闭就销毁,那么即使session的数据还存在服务器,但是浏览器再次请求服务器没有这个标识id也是找不到数据。

5.3 服务器压力

  1. cookie因为存储在客户端,不占用服务器资源,对于并发用户多的网站,cookie是很好的选择。
  2. session是存储在服务端,每个用户都会有一个对应的session。如果并发用户十分多,就会消耗大量的内存。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值