本文共 2422 字,大约阅读时间需要 8 分钟。
Local Storage,Session Storage,IndexedDB,Web SQL,Cookies都是浏览器中具有实现前端本地存储功能的介质。在提到过Web SQL Database实际上已经被废弃,而HTML5的支持的本地存储实际上变成了(Local Storage和Session Storage)与IndexedDB。Web Storage使用简单字符串键值对在本地存储数据,方便灵活,但是对于大量结构化数据存储比较难处理,IndexedDB是为了能够在客户端存储大量的结构化数据,并且使用索引高效检索的API。
Cookie数据始终在同源的Http请求中携带(即使不需要),在HttpRequest和HttpResponse的Header中实现浏览器和服务器间来回传递,最后保存在客户端,这样需要占用一些流量,同时Cookie数据还有path属性,可以限制Cookie只属于该路径下,且Cookie大小不能超过4k,所以Cookie只是适合保存较小的数据,如回话标识,用户登录信息,网站记住密码的功能通常是通过在Cookie中保存一段辨别用户身份的数据来实现。值得注意的是由于Cookie在Http协议请求中是以明文方式传递的(Https协议请求中不是),所以存在一定的安全性问题。此外Cookie只在设置的过期时间之前有效,即使窗口或者浏览器关闭,此外在所有同源的浏览器窗口可以实现Cookie的共享。
Local Storage与Session Storage是Web Storage提供的两种API,是HTML5中新增的本地同源存储解决方案之一,都是一种前端客户端本地存储慨念。
Local Storage是可以永久保存在浏览器本地,即使浏览器窗口或者浏览器关闭也不会被清除,除非显式的清除,所以用作客户端持久化数据,同时数据可以在所有同源窗口进行共享。其中数据不参与和服务器之间的通信,一般可以保存5M大小的数据。
Session Storage是会话级别的存储,用于本地存储会话(session)数据,且存储的数据只是在当前浏览器窗口的同一个会话页面有效,会话结束后数据也会随之销毁,所以不能进行持久化存储,且数据不会在浏览器窗口进行共享,即使是不同窗口的相同页面。其中数据不参与和服务器之间的通信,一般可以保存5M大小的数据。
特性 | Cookie | Local Storage | Session Storage |
---|---|---|---|
数据的生命期 | 可设置失效时间,默认是关闭浏览器后失效 | 除非被显式清除,否则永久保存 | 会话级存储,仅在当前会话下有效,会话结束,关闭页面或浏览器后被清除 |
存放数据大小 | 4KB左右 | 5MB~10MB(浏览器不同,情况不同) | 5MB~10MB(浏览器不同,情况不同) |
与服务器端通信 | 每次都会携带在HTTP头中,如果使用cookie保存过多数据会带来性能和安全问题 | 仅在客户端(即浏览器)中保存,不参与和服务器的通信 | 仅在客户端(即浏览器)中保存,不参与和服务器的通信 |
易用性 | 源生的Cookie接口不友好,开发者需要根据需求封装 | 源生接口良好,亦可再次封装来对Object和Array有更好的支持 | 源生接口良好,亦可再次封装来对Object和Array有更好的支持 |
应用场景 | 用户登录时,保存服务器返回的一段加密过的唯一辨识单一用户的code,用以判断当前用户登录状态,或者之前电商网站用来保存用户的购物车信息。 | Local Storage可以替代Cookie完成用户购物车信息的前端保存功能,同时可以当作HTML5游戏的本地数据的存储空间。 | 当页面存在多表单的情况下,可以利用Session Storage实现表单页拆分,优化用户体验。 |
注意 | 不要将系统敏感的数据保存到Cookie,Local Storage,Session Storage中,防止XSS注入的风险。因为XSS注入可以通过控制台对你的属性值进行修改。 |
如Cookies,Local Storage,Session Storage都是浏览器端的数据存储方案,但是不适合大量数据的存储,而且不提供搜索功能,不能建立自定的索引。而IndexedDB就是浏览器提供的本地数据库,它可以被网页脚本创建和操作。它可以存储大量数据,提供了查找接口,能够建立索引。但是不属于关系型数据库(不支持SQL查询语句,更类似于NoSQL数据库)。
IndexedDB的特点:
参考资料:
转载地址:http://zgsiz.baihongyu.com/