本地存储

Posted 花信

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了本地存储相关的知识,希望对你有一定的参考价值。

    前端本地存储方式有cookie和HTNL5的web Storage。

1.cookie

在h5之前,存储主要用的是cookie。cookie会随着每次http请求头信息一起发送,无形中增加了网络流量,另外,cookie能存储的数据容量有限,根据浏览器类型不同而不同,IE6大约只能存储2K,其余的为4K。cookie是网站为了标示用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)。

Cookie的结构:

Name = str(存储在cookie中的字符串,键和值都必须经过URL编码);  expires = GMT time(失效时间); domain=.wrox.com(域名); path =/(对于指定域中的那个路径发送cookie); secure(安全标志,只有在SSL连接才能发送cookie)

cookie的存取方法

存/取:赋值(键值对)

document.cookie = "键=值";  

删:(设置存储有效时长为过去时间)

cookie的优缺点

优点:(1)可控制过期时间,使其不会长期有效(2)可扩展、可用性比较好(3)可加密减少cookie被破解的可能性

缺点:(1)数量和长度有限制,最多20条,最长不能超过40k(2)在请求头上带着数据安全性差

cookie的应用场景

主要应用:购物车、客户端登录

封装cookie读、写和删除代码

读:获取URL编码后cookie值开始和结束的位置;

写:将键值编码后拼接后面的选项;

删除:设置相同的键名,路径,域名,安全属性。并把值设为“”空字符串,expries设为过去时间。

<script type="text/javascript">
         var cookieUtil = {};
         cookieUtil.set = function(name, value, expires, path, domain, secure) {
                   var cookieText = encodeURIComponent(name) + "=" + encodeURIComponent(value);
                   if(expires instanceof Date){
                            cookieText += ";expires" + expires.toGMTString();
                   }
                   if(path){
                            cookieText += ";path=" + path;
                   }
                   if(domain){
                            cookieText += ";domain" + domain;
                   }
                   if(secure){
                            cookieText += ";secure";
                   }
                   document.cookie = cookieText;
         };
         cookieUtil.get = function(name) {
     var cookieName = encodeURIComponent(name) + "=",
         cookieStart = document.cookie.indexof(cookieName),
         cookieValue = null;
           if(cookieStart > -1){
             var cookieEnd = document.cookie.indexof(";", cookieStart);
             if(cookieEnd = -1){
                       cookieEnd = document.cookie.length;
             }
             cookieValue = decodeURIComponent(document.cookie.subString(cookieStart+cookieName.length, cookieEnd));
           }
           return cookieValue;
         };
         cookieUtil.delet = function(name, path, dimain, secure){
                   this.set(name, "", new Date(0), path, domain, secure);
         }
</script>

2.localStorage

localStorage(本地存储),将数据保存在客户端本地的硬件设备,即浏览器被关闭后,该数据仍然存在。(通常只可以长期存储数据,没有时间限制。 localStorage中一般浏览器支持的是5M大小,这个在不同的浏览器中localStorage会有所不同)

使用方法

    localStorage.setItem("key","value");//存储

    localStorage.getItem(key);//按key进行取值

    localStorage.removeItems(key);//按key单个删除

    localStorage.clear();//删除全部数据

    localStorage.length;//获得数据的数量

    localStorage.valueOf();//获取全部值

优缺点

优点:

localStorage拓展了cookie的4k限制;

localStorage可以将第一次请求的5M大小数据直接存储到本地,相比于cookie可以节约带宽;

localStorage的使用也是遵循同源策略的,所以不同的网站直接是不能共用相同的localStorage;

缺点:

需要手动删除,否则长期存在;

浏览器大小不一,版本的支持也不一样;

localStorage只支持string类型的存储,JSON对象需要转换;

localStorage本质上是对字符串的读取,如果存储内容多的话会消耗内存空间,会导致页面变卡;

特点:

同源策略限制、只在本地存储、永久保存、同浏览器共享。

应用场合

1) 数据比较大的临时保存方案。如在线编辑文章时的自动保存。

2) 多页面访问共同数据。sessionStorage只适用于同一个标签页,localStorage相比而言可以在多个标签页中共享数据。

3.sessionStorage

sessionStorage(会话存储),用户在浏览某个网站时,从进入网站到浏览器关闭所经历的这段时间内,浏览器可以保存这段时间内所要求保存的任何数据。(创建另一个页面时同时可以使用,关闭浏览器之后数据就会消失。)

使用方法,同localStorage

特点

同源策略限制。若想在不同页面之间对同一个sessionStorage进行操作,这些页面必须在同一协议、同一主机名和同一端口下。

单标签页限制。sessionStorage操作限制在单个标签页中,在此标签页进行同源页面访问都可以共享sessionStorage数据。

只在本地存储。seesionStorage的数据不会跟随HTTP请求一起发送到服务器,只会在本地生效,并在关闭标签页后清除数据

存储方式。seesionStorage的存储方式采用key、value的方式。value的值必须为字符串类型(传入非字符串,也会在存储时转换为字符串。)。

存储上限限制:不同的浏览器存储的上限也不一样,但大多数浏览器把上限限制在5MB以下。

应用场合

sessionStorage 非常适合单页应用程序,可以方便在各业务模块进行传值。

4.localStorange与sessionStorage的区别

相同点:

存值都是以键值对形式存在,值也是存入字符串类型(如果是对象,就序列化以后再存入);

localStorage和sessionStorage使用时使用相同的API;

都是用来存储客户端临时信息的对象;

不同点:

H5的两种存储技术的最大区别就是生命周期。

localStorage是本地存储,存储期限不限;

sessionStorage是会话存储,页面关闭数据就会丢失。

5.cookies,sessionStorage 和 localStorage 的区别

概念:

cookie是网站为了标示用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)。

sessionStorage和localStorage是web存储机制,将数据存储在本地客户端上,无须持续的将数据发送给浏览器,存储大量可以跨浏览器的数据机制。

载体:

cookie数据始终在同源的http请求中携带(即使不需要),记会在浏览器和服务器间来回传递,浪费带宽。

sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存

方法:

Web Storage拥有setItem,getItem,removeItem,clear等方法,不像cookie需要前端开发者自己封装setCookie,getCookie

作用:Cookie的作用是与服务器进行交互,作为HTTP规范的一部分而存在 ,而Web Storage仅仅是为了在本地“存储”数据而生。

存储大小:

    cookie数据大小不能超过4k。

    sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。

有期时间:

    localStorage    存储持久数据,浏览器关闭后数据不丢失除非主动删除数据;

    sessionStorage  数据在当前浏览器窗口关闭后自动删除。

    cookie          设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭

以上是关于本地存储的主要内容,如果未能解决你的问题,请参考以下文章

如何将代码片段存储在 mongodb 中?

如何在不将图像保存在本地的情况下将捕获的图像(Surface View)传递给另一个片段?

如何将 r ggplot 图存储为 html 代码片段

sql 这些代码片段将演示如何逐步使用PolyBase。你应该有一个blob存储和存储秘密方便

微信小程序代码片段

vscode代码片段建议bug