cookies、sessionStorage和localStorage
请描述一下cookies、sessionStorage、localStorage的区别?
sessionStorage和localStorage是HTML5 Web Storage API提供的,可以方便在web请求之间保存数据。有了本地数据,就可以避免数据在浏览器和服务器间不必要地来回传递。
sessionStorage、localStorage、cookie都是在浏览器端存储的数据,其中sessionStorage的概念很特别,引入了一个”浏览器窗口“的概念。sessionStorage是在同源的同窗口(或tab)中,始终存在的数据。也就是说只要这个浏览器窗口没有关闭,即使刷新页面或进入同源另一个页面,数据仍然存在。关闭窗口后,sessionStorage即被销毁。同时”独立“打开的不同窗口,即使是同一页面,sessionStorage对象也是不同的。
Web Storage带来的好处:
-
减少网络流量:一旦数据保存在本地后,就可以避免再向服务器请求数据,因此减少不必要的数据请求,减少数据在浏览器和服务端间不必要地来回传递
-
快速显示数据:性能好,从本地读取数据比通过网络从服务器获得数据快的多,本地数据可以及时获得。再加上网页本身也可以有缓存,因此整个页面和数据都在本地的话,可以立即显示。
-
临时存储:很多时候数据只需要在用户浏览一组页面期间使用,关闭窗口后数据就可以丢弃了,这种情况使用 sessionStorage 非常方便
浏览器本地存储与服务器存储之间的区别
其实数据既可以在浏览器本地存储,也可以在服务器端存储。
浏览器端可以保存一些数据,需要的时候直接从本地获取,sessionStorage、localStorage和cookie都由浏览器存储在本地的数据
服务器端也可以保存所有用户的所有数据,但需要的时候浏览器要向服务器请求数据。
-
服务器端可以保存用户的持久数据,如数据库和云存储将用户的大量数据保存在服务器端。
-
服务器端可以保存用户的临时会话数据。服务器端的session机制,如jsp的session对象,数据保存在服务器上。实现上,服务器和浏览器之间仅需要传递session id即可,服务器根据session id找到对应用户的session对象。会话数据仅在一段事件内有效,这个时间就是server端设置的session有效期。
服务器端保存所有的用户的数据,所以服务器端的开销较大,而浏览器端保存则把不同用户需要的数据分布保存在用户各自的浏览器中。
浏览器一般只用来存储小数据,而服务器可以存储大数据或小数据。
服务器存储数据安全一些,浏览器只适合存储一般数据。
sessionStorage、localStorage和cookie之间的区别
共同点:都是保存在浏览器端,且同源的。
区别:
-
cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递。而sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。cookie数据还有路径(path)的概念,可以限制cookie只属于某个路径下。
-
存储大小限制也不同,cookie数据不能超过4k,同时因为每次http请求都会携带cookie,所以cookie只适合很小的数据,如会话标识。sessionStorage和localStorage虽然也有存储大小的限制。但比cookie大得多,可以达到5M或更大。
-
数据有效期不同,sessionStorage:仅在当前浏览器窗口关闭前有效,自然也就不可能持久保持;localStorage:始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据;cookie只在设置得cookie过期时间之前一直有效,即使窗口或浏览器关闭。
-
作用域不同,sessionStorage不在不同得浏览器窗口中共享,即便是同一个页面;localStorage在所有同源窗口中都是共享的;cookie也是在所有同源窗口中都是共享的。
-
Web Storage支持事件通知机制,可以将数据更新得通知发送给监听者。
-
Web Storage的api接口使用更方便
sessionStorage与页面js数据对象的区别
页面中一般的js对象或数据的生存期是仅在当前页面有效,因此刷新页面或转到另一页面这样的重新加载页面的情况,数据就不存在了。
而sessionStorage只要同源的同窗口(或tab)中,刷新页面或进入同源的不同页面,数据始终存在。也就是说只要这个浏览器窗口没有关闭,加载新页面或重新加载,数据仍然存在。
localStorage和sessionStorage API
localStorage和session都继承于Storage,提供了统一的api来访问和设置数据。api列表为:
- clear:清除存储中的所有本地存储数据
- getItem:接受一个参数key,获取对应key的本地存储
- key:接受一个整数索引,返回对应本地存储中索引的键
- removeItem:接受一个参数key,删除对应本地存储的key
- setItem接受两个参数,key和value,如果不存在则添加,存在则更新。
localStorage.setItem('lemon', '22');
localStorage.key(0); // lemon
localStorage.getItem('order'); // 22
localStorage.removeItem('order');
localStorage.clear();
// 对象访问方式同样有效
localStorage.lemon = '22';
localStorage.lemon; // 22