daily-interview / fe-interview

:smiley: 每日一道经典前端面试题,一起共同成长。
https://blog.csdn.net/u010494753
MIT License
172 stars 22 forks source link

描述一下 cookies,sessionStorage 和 localStorage 的区别? #23

Open artdong opened 4 years ago

artdong commented 4 years ago

描述一下 cookies,sessionStorage 和 localStorage 的区别?

artdong commented 4 years ago

基本概念

1、cookie

cookie英文饼干,顾名思义,大小应该非常小,cookie非常小,它的大小限制在4kb左右,是网景公司的前雇员在1993年发明。它的主要用于保存登陆信息,比如你登陆某个网站市场可以看到'记住密码’,这就是通过在cookie中存入一段辨别用户身份的数据来实现的。

2、HTML5 Web 存储

HTML5 web 存储,一个比cookie更好的本地存储方式。

Web 存储需要更加的安全与快速. 这些数据不会被保存在服务器上,但是这些数据只用于用户请求网站数据上.它也可以存储大量的数据,而不影响网站的性能.

数据以 键/值 对存在, web网页的数据只允许该网页访问使用。

HTML5的WebStorage提供了两种API:localStorage(本地存储)和sessionStorage(会话存储)。

在使用 web 存储前,应检查浏览器是否支持 localStorage 和sessionStorage:

if(typeof(Storage)!=="undefined")
{
    // 是的! 支持 localStorage  sessionStorage 对象!
    // 一些代码.....
} else {
    // 抱歉! 不支持 web 存储。
}

浏览器支持: Internet Explorer 8+, Firefox, Opera, Chrome, 和 Safari支持Web 存储。

注意: Internet Explorer 7 及更早IE版本不支持web 存储.

2.1 localStorage

localStorage是HTML5标准中新加入的技术,当然早在IE6时代就有一个userData的东西用于本地存储,而当时考虑到浏览器的兼容性,更通用的方案是使用flash。如今localStorage被大多数浏览器所支持。

2.2 sessionStorage

sessionStorage与localStorage的接口类似,但保存数据的生命周期与localStorage不同,做过后端的同学都知道Session这个词,翻译过来就是会话。而sessionStorage是前端的一个概念。它只是可以将一部分数据在当前会话中保存下来,刷新页面数据依旧存在。但是页面关闭后,sessionStorage中的数据就会被清空。

三者的异同

  1. 数据上的生命周期的不同

Cookie 一般由服务器生成,可设置失效时间,如果在浏览器端生成cookie,默认是关闭后失效。

  1. localStorage 除非被永久清除,否则永久保存。

sessionStorage 仅在当前会话有效,关闭页面或浏览器后被清除

  1. 存放数据的大小不同

Cookie 一般为4kb

localStorage 和 sessionStorage 一般为5mb

  1. 与服务器端通信不同

Cookie 每次都会携带HTTP头中,如果使用cookie保存过多数据会带来性能问题

localStorage 和 sessionStorage 仅在客户端(即浏览器)中保存,不参与和服务器的通信。

  1. 作用域

这里的作用域指的是:如何隔离开不同页面之间的localStorage(总不能在百度的页面上能读到腾讯的localStorage吧,哈哈哈)。

localStorage只要在相同的协议、相同的主机名、相同的端口下,就能读取/修改到同一份localStorage数据。

sessionStorage比localStorage更严苛一点,除了协议、主机名、端口外,还要求在同一窗口(也就是浏览器的标签页)下。

易用性

Cookie 需要程序员自己来封装,原生的cookie接口不够友好

localStorage 和 sessionStorage 原生接口可以接受,可以封装来对Object和Array有更好的支持。

应用场景

因为考虑到每个HTTP请求都会带着Cookie的信息,所以Cookie当然能是精简就精简,比较常用的一个应用场景就是判断用户是否登陆,针对登陆过的用户服务端就在它登陆时往Cookie中写入一段加密过的唯一识别单一用户的辨识码,下次只要读取这个值就可以判断当前用户是否登陆。曾经还使用Cookie来保存用户在电商网站上的购物车信息,如今有了localStorage,这一切问题变得越来越轻松。

localStorage:适合长期保存在本地的数据,如:长期登录、判断用户是否已登录、统计页面访问次数、购物车信息等。

sessionStorage:适合于浏览器窗口关闭后就销毁的数据,如:敏感账号一次性登录、统计当前页面元素的点击次数等。