cookie和session的区别
cookie
Cookie是访问某些网站以后在本地存储的一些网站相关的信息
Cookie中一般包括如下主要内容:
- key:设置的cookie的key
- value:key对应的value
- max_age/expire_time:设置cookie的过期时间
- domain:该cookie在哪个域名中有效。一般设置子域名,比如cms.example.com。
- path:该cookie在哪个路径下有效
例如:我们登录某一个网站时需要输入用户名和密码,如果用户名和密码保存为cookie,则下次我们登录该网站的时候就不需要在输入用户密码了
session
session是存在服务器的一种李永来存放用户数据的类HashTable结构。
浏览器第一次发送请求时,服务器自动生成了—HashTable和—SessionID来唯一标识这个HashTabe,并将其通过响应发送到浏览器。浏览器第二次发送请求会将前一次服务器响应中的SessionID放在请求中一并发送到浏览器上,服务器从请求中提取出sessionID,并和保存的所有sessionID进行对比,找到这个用户对应的HashTable。
例如:我们浏览一个购物网站,用户将部分商品添加到购物车中,许久以前许多网站都是用服务端session存储购物车内容(现在基本都是用数据库了),就用到了session存储这部分信息。
区别:
1. 存储位置不同
- cookie的数据信息存放在本地。
- session的数据信息存放在服务器上
2. 存储容量大小不同
- cookie存储的容量较小,一般 <= 4kb
- session存储容量大小没有限制(但是为了服务器性能考虑,一般不能存放太多数据)。
3. 存储有效期不同
- cookie可以长期存储,只要不超过设置的过期时间,可以一直存储
- session在超过一定的操作时间(通常为30分钟)后会失效,但是当关闭浏览器时,为了保护用户信息,会自动调用session.invalidate()方法,该方法会清除掉session中的信息
4. 安全性不同
- cookie存储在客户端,所以可以分析存放在本地的cookie并进行cookie欺骗,安全性较低。
- session存储在服务器上,不存在敏感信息泄露的风险,安全性比较高。
5. 域支持范围不同
- cookie支持跨域名访问。例如:所有a.com的cookie在a.com下都能用。
- session不支持跨域访问。例如:www.a.com的session在api.a.com下不能用
6. 对服务器压力不同
- cookie保存在客户端,不占用服务器资源
- session是保存在服务器端,每个用户都会产生一个session,session过多的时候会消耗服务器资源,所以大型网站会有专门的session服务器
7. 存储的数据类型不同
- cookie中只能保管ASCII字符串,并需要通过编码方式存储为Unicode字符或者二进制数据
- session中能够存储任何类型的数据,包括且不限于string,integer,list,map等