<p>HTML5 Web 存储是本地存储,存储在客户端,包括localStorage和sessionStorage。HTML5 Web 存储是以键/值对的形式存储的,通常以字符串存储。众所周知,自从HTML 5 标准出现之后,本地化存储一度成为热搜的关键词。在HTML 5 最开始时,本地存储有两种方式:一种是web Storage,另一种是web SQL。</p><p>由于web SQL的实现是基于SQLite,它更倾向于DataBase方向,且W3C官方在2011年11月宣布不在维护web SQL规范,故其API接口目前已经不属于HTML 5的范畴。因此,目前我们常讲的HTML 5本地存储,多指的是web Storage。</p><p style="white-space: normal;"><strong>cookie、localStorage、sessionStorage分别是什么</strong></p><p style="white-space: normal;"><strong>Cookie</strong></p><p style="white-space: normal;">Cookie 是小甜饼的意思。顾名思义,cookie 确实非常小,它的大小限制为4KB左右。它的主要用途有保存登录信息,比如你登录某个网站市场可以看到“记住密码”,这通常就是通过在 Cookie 中存入一段辨别用户身份的数据来实现的。</p><p style="white-space: normal;"><strong>localStorage</strong></p><p style="white-space: normal;">localStorage 是 HTML5 标准中新加入的技术,它并不是什么划时代的新东西。早在 IE 6 时代,就有一个叫 userData 的东西用于本地存储,而当时考虑到浏览器兼容性,更通用的方案是使用 Flash。而如今,localStorage 被大多数浏览器所支持,如果你的网站需要支持 IE6+,那以 userData 作为你的 polyfill 的方案是种不错的选择。</p><p style="white-space: normal;"><strong>sessionStorage</strong></p><p style="white-space: normal;">sessionStorage 与 localStorage 的接口类似,但保存数据的生命周期与 localStorage 不同。做过后端开发的同学应该知道 Session 这个词的意思,直译过来是“会话”。而 sessionStorage 是一个前端的概念,它只是可以将一部分数据在当前会话中保存下来,刷新页面数据依旧存在。但当页面关闭后,sessionStorage 中的数据就会被清空。</p><p>那么,cookie、localStorage、sessionStorage这三种前端缓存有什么区别呢?</p><table width="670"><thead style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 0px; overflow-wrap: break-word;"><tr style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 0px; border-width: 1px 0px 0px; border-right-style: initial; border-bottom-style: initial; border-left-style: initial; border-right-color: initial; border-bottom-color: initial; border-left-color: initial; border-image: initial; border-top-style: solid; border-top-color: rgb(221, 221, 221); overflow-wrap: break-word;" class="firstRow"><th style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 8px; overflow-wrap: break-word; border-top-color: rgb(221, 221, 221); color: rgb(79, 79, 79); line-height: 22px; text-align: left; background-color: rgb(239, 243, 245);">特性</th><th style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 8px; overflow-wrap: break-word; border-top-color: rgb(221, 221, 221); color: rgb(79, 79, 79); line-height: 22px; text-align: left; background-color: rgb(239, 243, 245);">Cookie</th><th style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 8px; overflow-wrap: break-word; border-top-color: rgb(221, 221, 221); color: rgb(79, 79, 79); line-height: 22px; text-align: left; background-color: rgb(239, 243, 245);">localStorage</th><th style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 8px; overflow-wrap: break-word; border-top-color: rgb(221, 221, 221); color: rgb(79, 79, 79); line-height: 22px; text-align: left; background-color: rgb(239, 243, 245);">sessionStorage</th></tr></thead><tbody style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 0px; border: 0px; overflow-wrap: break-word;"><tr style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 0px; border-width: 1px 0px 0px; border-right-style: initial; border-bottom-style: initial; border-left-style: initial; border-right-color: initial; border-bottom-color: initial; border-left-color: initial; border-image: initial; border-top-style: solid; border-top-color: rgb(221, 221, 221); overflow-wrap: break-word;"><td style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 8px; overflow-wrap: break-word; color: rgb(79, 79, 79); line-height: 22px;">数据的生命期</td><td style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 8px; overflow-wrap: break-word; color: rgb(79, 79, 79); line-height: 22px;">一般由服务器生成,可设置失效时间。如果在浏览器端生成Cookie,默认是关闭浏览器后失效</td><td style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 8px; overflow-wrap: break-word; color: rgb(79, 79, 79); line-height: 22px;">除非被清除,否则永久保存</td><td style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 8px; overflow-wrap: break-word; color: rgb(79, 79, 79); line-height: 22px;">仅在当前会话下有效,关闭页面或浏览器后被清除</td></tr><tr style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 0px; border-width: 1px 0px 0px; border-right-style: initial; border-bottom-style: initial; border-left-style: initial; border-right-color: initial; border-bottom-color: initial; border-left-color: initial; border-image: initial; border-top-style: solid; border-top-color: rgb(221, 221, 221); background-color: rgb(247, 247, 247); overflow-wrap: break-word;"><td style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 8px; overflow-wrap: break-word; color: rgb(79, 79, 79); line-height: 22px;">存放数据大小</td><td style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 8px; overflow-wrap: break-word; color: rgb(79, 79, 79); line-height: 22px; vertical-align: middle;">4K左右</td><td colspan="2" style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 8px; overflow-wrap: break-word; color: rgb(79, 79, 79); line-height: 22px;">一般为5MB</td></tr><tr style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 0px; border-width: 1px 0px 0px; border-right-style: initial; border-bottom-style: initial; border-left-style: initial; border-right-color: initial; border-bottom-color: initial; border-left-color: initial; border-image: initial; border-top-style: solid; border-top-color: rgb(221, 221, 221); overflow-wrap: break-word;"><td style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 8px; overflow-wrap: break-word; color: rgb(79, 79, 79); line-height: 22px;">与服务器端通信</td><td style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 8px; overflow-wrap: break-word; color: rgb(79, 79, 79); line-height: 22px;">每次都会携带在HTTP头中,如果使用cookie保存过多数据会带来性能问题</td><td colspan="2" style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 8px; overflow-wrap: break-word; color: rgb(79, 79, 79); line-height: 22px;">仅在客户端(即浏览器)中保存,不参与和服务器的通信</td></tr><tr style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 0px; border-width: 1px 0px 0px; border-right-style: initial; border-bottom-style: initial; border-left-style: initial; border-right-color: initial; border-bottom-color: initial; border-left-color: initial; border-image: initial; border-top-style: solid; border-top-color: rgb(221, 221, 221); background-color: rgb(247, 247, 247); overflow-wrap: break-word;"><td style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 8px; overflow-wrap: break-word; color: rgb(79, 79, 79); line-height: 22px;">易用性</td><td style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 8px; overflow-wrap: break-word; color: rgb(79, 79, 79); line-height: 22px;">需要程序员自己封装,源生的Cookie接口不友好</td><td colspan="2" style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 8px; overflow-wrap: break-word; color: rgb(79, 79, 79); line-height: 22px;">源生接口可以接受,亦可再次封装来对Object和Array有更好的支持</td></tr></tbody></table><p><strong>小案例:</strong></p><pre class="brush:js;toolbar:false">// 储存一个session sessionStorage.setItem("key", "value"); // 获取一个session var value = sessionStorage.getItem("key"); // 删除一个session sessionStorage.removeItem("key"); // 清除所有session sessionStorage.clear(); // 遍历session for(var i=0; i<sessionStorage.length; i++){ var key = storage.key(i); var value = storage.getItem(key); console.log(key + "=" + value); }</pre><p>以上就是关于“HTML5本地存储cookie、localStorage、sessionStorage三者区别”的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流。</p>