cookies,sessionStorage 和 localStorage 的区别

sessionStorage 和 localStorage 是 HTML5 Web Storage API 提供的,可以方便的在 web 请求之间保存数据。有了本地数据,就可以避免数据在浏览器和服务器间不必要地来回传递。

 localStorage: 用于持久化的本地存储,数据永远不会过期,关闭浏览器也不会丢失。

sessionStorage : 同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。因此sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储

共同点:

sessionStorage、 localStorage 、 cookie 都是在浏览器端存储的数据,其中 sessionStorage 的概念很特别,引入了一个“浏览器窗口”的概念。sessionStorage 是在同源的同窗口(或 tab )中,始终存在的数据。也就是说只要这个浏览器窗口没有关闭,即使刷新页面或进入同源另一页面,数据仍然存在。关闭窗口后, sessionStorage 即被销毁。同时“独立”打开的不同窗口,即使是同一页面, sessionStorage 对象也是不同的。

cookies会发送到服务器端。其余两个不会。

Microsoft 指出 Internet Explorer 8 增加 cookie 限制为每个域名 50 个,但 IE7 似乎也允许每个域名 50 个 cookie 。 Firefox 每个域名 cookie 限制为 50 个。 Opera 每个域名 cookie 限制为 30 个。 Firefox 和 Safari 允许 cookie 多达 4097 个字节,包括名( name )、值( value )和等号。 Opera 许 cookie 多达 4096 个字节,包括:名( name )、值( value )和等号。 Internet Explorer 允许 cookie 多达 4095 个字节,包括:名( name )、值( value )和等号。

区别:

Cookie

  • 每个域名存储量比较小(各浏览器不同,大致 4K )
  • 所有域名的存储量有限制(各浏览器不同,大致 4K )
  • 有个数限制(各浏览器不同)
  • 会随请求发送到服务器

 LocalStorage

  • 永久存储
  • 单个域名存储量比较大(推荐 5MB ,各浏览器不同)
  • 总体数量无限制

SessionStorage

  • 只在 Session 内有效
  • 存储量更大(推荐没有限制,但是实际上各浏览器也不同)

Cookie的优点与弊端:

cookie虽然在持久保存客户端数据提供了方便,分担了服务器存储的负担,但还是有很多局限性的。

第一:每个特定的域名下最多生成20个cookie

  • IE6或更低版本最多20个cookie
  • IE7和之后的版本最后可以有50个cookie。
  • Firefox最多50个cookie
  • chrome和Safari没有做硬性限制

IE和Opera 会清理近期最少使用的cookie,Firefox会随机清理cookie。cookie的最大大约为4096字节,为了兼容性,一般不能超过4095字节。IE 提供了一种存储可以持久化用户数据,叫做 userData,从IE5.0就开始支持。每个数据最多128K,每个域名下最多1M。这个持久化数据放在缓存中,如果缓存没有清理,那么会一直存在。

  • 优点:极高的扩展性和可用性
  1. 通过良好的编程,控制保存在cookie中的session对象的大小。
  2. 通过加密和安全传输技术(SSL),减少cookie被破解的可能性。
  3. 只在cookie中存放不敏感数据,即使被盗也不会有重大损失。
  4. 控制cookie的生命期,使之不会永远有效。偷盗者很可能拿到一个过期的cookie。
  • 缺点:
  1. `Cookie`数量和长度的限制。每个domain最多只能有20条cookie,每个cookie长度不能超过4KB,否则会被截掉。
  2. 安全性问题。如果cookie被人拦截了,那人就可以取得所有的session信息。即使加密也与事无补,因为拦截者并不需要知道cookie的意义,他只要原样转发cookie就可以达到目的了。
  3. 有些状态不可能保存在客户端。例如,为了防止重复提交表单,我们需要在服务器端保存一个计数器。如果我们把这个计数器保存在客户端,那么它起不到任何作用。

几种不同的缓存机制的区别如下图:

cookies,sessionStorage 和 localStorage 的区别_第1张图片

随堂测试:

  1. 如何让cookie浏览器关闭就失效?——不对cookie设置任何正、负或0时间的即可;
  2. sessionStorage在浏览器多窗口之间 (同域)数据是否互通共享? ——不会,都是独立的,localStorage会共享;
  3. 能让localStorage也跟cookie一样设置过期时间?答案是可以的,在存储数据时,也存储一个时间戳,get数据之前,先拿当前时间跟你之前存储的时间戳做比较

你可能感兴趣的:(javascript,http)