阅读 1539

cookie和session的区别(全面总结)

前言

前些天在面试合合信息科技的实习生时,笔试时遇到cookie和session的对比,今天来个全面总结。

cookie

Cookie是访问某些网站以后在本地存储的一些网站相关的信息,下次再访问的时候减少一些步骤。
Cookie中一般包括如下主要内容:

  1. key:设置的cookie的key。
  2. value:key对应的value。
  3. max_age/expire_time:设置cookie的过期时间。
  4. domain:该cookie在哪个域名中有效。一般设置子域名,比如cms.example.com。
  5. path:该cookie在哪个路径下有效。

例如,我们登录某一个网站时需要输入用户名及密码,如果用户名和密码保存为cookie,则下次我们登录该网站的时候就不需要再输入用户密码了。

session

session是存在服务器的一种用来存放用户数据的类HashTable结构。
浏览器第一次发送请求时,服务器自动生成了一HashTable和一SessionID来唯一标识这个HashTable,并将其通过响应发送到浏览器。浏览器第二次发送请求会将前一次服务器响应中的SessionID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户对应的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等。

文章分类
前端
文章标签