美文网首页
2019-06-18浏览器的存储

2019-06-18浏览器的存储

作者: qiaoguoxing | 来源:发表于2019-06-18 11:29 被阅读0次

                                                      本文转载自前端工匠,如有侵权联系立刻删除

一、Cookie

1.Cookie的来源

Cookie 的本职工作并非本地存储,而是“维持状态”。 因为HTTP协议是无状态的,HTTP协议自身不对请求和响应之间的通信状态进行保存,通俗来说,服务器不知道用户上一次做了什么,这严重阻碍了交互式Web应用程序的实现。在典型的网上购物场景中,用户浏览了几个页面,买了一盒饼干和两瓶饮料。最后结帐时,由于HTTP的无状态性,不通过额外的手段,服务器并不知道用户到底买了什么,于是就诞生了Cookie。它就是用来绕开HTTP的无状态性的“额外手段”之一。服务器可以设置或读取Cookies中包含信息,借此维护用户跟服务器会话中的状态。

我们可以把Cookie 理解为一个存储在浏览器里的一个小小的文本文件,它附着在 HTTP 请求上,在浏览器和服务器之间“飞来飞去”。它可以携带用户信息,当服务器检查 Cookie 的时候,便可以获取到客户端的状态。

在刚才的购物场景中,当用户选购了第一项商品,服务器在向用户发送网页的同时,还发送了一段Cookie,记录着那项商品的信息。当用户访问另一个页面,浏览器会把Cookie发送给服务器,于是服务器知道他之前选购了什么。用户继续选购饮料,服务器就在原来那段Cookie里追加新的商品信息。结帐时,服务器读取发送来的Cookie就行了。

2.什么是Cookie及应用场景

Cookie指某些网站为了辨别用户身份而储存在用户本地终端上的数据(通常经过加密)。 cookie是服务端生成,客户端进行维护和存储。通过cookie,可以让服务器知道请求是来源哪个客户端,就可以进行客户端状态的维护,比如登陆后刷新,请求头就会携带登陆时response header中的set-cookie,Web服务器接到请求时也能读出cookie的值,根据cookie值的内容就可以判断和恢复一些用户的信息状态。

如上图所示,Cookie 以键值对的形式存在

典型的应用场景有:

1.记住密码,下次自动登录。

2.购物车功能。

3.记录用户浏览数据,进行商品(广告)推荐。

第一次访问网站的时候,浏览器发出请求,服务器响应请求后,会在响应头里面添加一个Set-Cookie选项,将cookie放入到响应请求中,在浏览器第二次发请求的时候,会通过Cookie请求头部将Cookie信息发送给服务器,服务端会辨别用户身份,另外,Cookie的过期时间、域、路径、有效期、适用站点都可以根据需要来指定。

Cookie的生成方式主要有两种:

生成方式一:http response header中的set-cookie

我们可以通过响应头里的 Set-Cookie 指定要存储的 Cookie 值。默认情况下,domain 被设置为设置 Cookie 页面的主机名,我们也可以手动设置 domain 的值。

Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2018 07:28:00 GMT;//可以指定一个特定的过期时间(Expires)或有效期(Max-Age)

当Cookie的过期时间被设定时,设定的日期和时间只与客户端相关,而不是服务端。

生成方式二:js中可以通过document.cookie可以读写cookie,以键值对的形式展示

例如我们在掘金社区控制台输入以下三句代码,便可以在Chrome 的 Application 面板查看生成的cookie:

document.cookie="userName=hello"

document.cookie="gender=male"

document.cookie='age=20;domain=.baidu.com'

从上图中我们可以得出:

Domain 标识指定了哪些域名可以接受Cookie。如果没有设置domain,就会自动绑定到执行语句的当前域。 如果设置为”.baidu.com”,则所有以”baidu.com”结尾的域名都可以访问该Cookie,所以在掘金社区上读取不到第三条代码存储Cookie值。

HTML5中新增了本地存储的解决方案----Web Storage,它分成两类:sessionStorage和localStorage。这样有了WebStorage后,cookie能只做它应该做的事情了——作为客户端与服务器交互的通道,保持客户端状态。

二、LocalStorage

1.LocalStorage的特点

     1.保存的数据长期存在,下一次访问该网站的时候,网页可以直接读取以前保存的数据。

     2.大小为5M左右

     3.仅在客户端使用,不和服务端进行通信

     4.接口封装较好

基于上面的特点,LocalStorage可以作为浏览器本地缓存方案,用来提升网页首屏渲染速度(根据第一请求返回时,将一些不变信息直接存储在本地)。

2.存入/读取数据

localStorage保存的数据,以“键值对”的形式存在。也就是说,每一项数据都有一个键名和对应的值。所有的数据都是以文本格式保存。 存入数据使用setItem方法。它接受两个参数,第一个是键名,第二个是保存的数据。 localStorage.setItem("key","value");读取数据使用getItem方法。它只有一个参数,就是键名。 varvalueLocal=localStorage.getItem("key");

<script>

if(window.localStorage){

  localStorage.setItem('name','world')

  localStorage.setItem(“gender','famale')

}

</script>

<body>

<div id="name"></div>

<div id="gender"></div>

<script>

var name=localStorage.getItem('name')

var gender=localStorage.getItem('gender')

document.getElementById('name').innerHTML=name

document.getElementById('gender').innerHTML=gender

</script>

</body>

3.使用场景

LocalStorage在存储方面没有什么特别的限制,理论上 Cookie 无法胜任的、可以用简单的键值对来存取的数据存储任务,都可以交给 LocalStorage 来做。

这里给大家举个例子,考虑到 LocalStorage 的特点之一是持久,有时我们更倾向于用它来存储一些内容稳定的资源。比如图片内容丰富的电商网站会用它来存储 Base64 格式的图片字符串:

三、sessionStorage

sessionStorage保存的数据用于浏览器的一次会话,当会话结束(通常是该窗口关闭),数据被清空;sessionStorage 特别的一点在于,即便是相同域名下的两个页面,只要它们不在同一个浏览器窗口中打开,那么它们的 sessionStorage 内容便无法共享;localStorage 在所有同源窗口中都是共享的;cookie也是在所有同源窗口中都是共享的。除了保存期限的长短不同,SessionStorage的属性和方法与LocalStorage完全一样。

1.sessionStorage的特点

    1.会话级别的浏览器存储

    2.大小为5M左右

    3.仅在客户端使用,不和服务端进行通信

    4.接口封装较好

2.使用场景

sessionStorage 更适合用来存储生命周期和它同步的会话级别的信息。这些信息只适用于当前会话,当你开启新的会话时,它也需要相应的更新或释放。比如微博的 sessionStorage就主要是存储你本次会话的浏览足迹:

lasturl 对应的就是你上一次访问的 URL 地址,这个地址是即时的。当你切换 URL 时,它随之更新,当你关闭页面时,留着它也确实没有什么意义了,干脆释放吧。这样的数据用 sessionStorage 来处理再合适不过。

3.sessionStorage 、localStorage 和 cookie 之间的区别

共同点:都是保存在浏览器端,且都遵循同源策略。

不同点:在于生命周期与作用域的不同

作用域:localStorage只要在相同的协议、相同的主机名、相同的端口下,就能读取/修改到同一份localStorage数据。sessionStorage比localStorage更严苛一点,除了协议、主机名、端口外,还要求在同一窗口(也就是浏览器的标签页)下

生命周期:localStorage 是持久化的本地存储,存储在其中的数据是永远不会过期的,使其消失的唯一办法是手动删除;而 sessionStorage 是临时性的本地存储,它是会话级别的存储,当会话结束(页面被关闭)时,存储内容也随之被释放。

Web Storage 是一个从定义到使用都非常简单的东西。它使用键值对的形式进行存储,这种模式有点类似于对象,却甚至连对象都不是——它只能存储字符串,要想得到对象,我们还需要先对字符串进行一轮解析。

说到底,Web Storage 是对 Cookie 的拓展,它只能用于存储少量的简单数据。当遇到大规模的、结构复杂的数据时,Web Storage 也爱莫能助了。这时候我们就要清楚我们的终极大 boss——IndexedDB!

IndexedDB这部分没有看,后面用到看原文

总结

正是浏览器存储、缓存技术的出现和发展,为我们的前端应用带来了无限的转机。近年来基于存储、缓存技术的第三方库层出不绝,此外还衍生出了 PWA 这样优秀的 Web 应用模型。总结下本文几个核心观点:

1.Cookie 的本职工作并非本地存储,而是“维持状态”

2.Web Storage 是 HTML5 专门为浏览器存储而提供的数据存储机制,不与服务端发生通信

3.IndexedDB 用于客户端存储大量结构化数据

相关文章

  • 2019-06-18浏览器的存储

    本文转载自前端工匠,如有侵权联系立刻删除 一、Cookie ...

  • 《JS原理、方法与实践》- 本地存储

    本地存储就是指在浏览器中存储数据,是相对于服务器中存储数据来说的。 1. 本地存储的分类 浏览器的本地存储主要包括...

  • session和cookie的区别

    cookie的存在方式 cookie是浏览器支持的本地存储方式,存储形式是dict(键值对的形式),存储在浏览器中...

  • 浏览器特征

    浏览器存储环境

  • 聊一聊 cookie

    cookie 是怎么工作的? 首先必须明确一点,存储cookie是浏览器提供的功能。cookie其实是存储在浏览器...

  • Scrapy+redis分布式爬虫(三、具有模拟登陆功能爬虫的编

    cookie与session cookie是浏览器支持的一种本地存储方式, 以键值对的方式存储到浏览器中。 之所以...

  • js中的本地存储

    js中的本地存储:使用js向浏览器的某一位置存储一些内容,浏览器关闭也不会销毁。本地存储的方案: 传统方案: 1....

  • cookie、sessionStorage、localStora

    [ 本地存储 ]把一些信息存储在当前浏览器 指定域下的某一个地方(存储到物理硬盘中)1、不能跨浏览器传输:在谷歌浏...

  • js基础(7)

    33、JS中的本地存储 把一些信息存储在当前浏览器指定域下的某一个地方(存储到物理硬盘中)1、不能跨浏览器传输:在...

  • 浏览器存储

    cookie cookie 是存储在浏览器本地的一小段数据(最大不超过4k),用来记录一些当页面关闭后还需要存储的...

网友评论

      本文标题:2019-06-18浏览器的存储

      本文链接:https://www.haomeiwen.com/subject/ewwxqctx.html