关于Cookie、localStroage和sessionStorage的小结

今天和大家聊一聊有关Cookie、localStroage、sessionStorage在日常开发中会经常用到的,所以和大家简单分享一下。

一、Cookie

Cookie: HTTPCookie一般直接称之为cookie,最初是用来存储会话信息的,由HTTP服务器设置,然后保存在浏览器中,目前已近成为了一种标准。由于HTTP协议是一种无状态协议,在前端请求服务器对任何HTTP请求都需要携带cookie,其中包含着会话信息。

特点:

  1.     cookie在性质上是绑定在特定域名之下的,是不可跨域的,满足同源策略(即同协议,同域名,同端口),当设定了一个cookie之后,再给创建他的域名发送请求的时候都会包含这个cookie,这个限制确保了存储在cookie之中的信息只能让批准的接收到访问,而不能被第三方访问。比如,我们日常浏览网站的时候,百度和谷歌都会使用cookie,但是浏览器访问谷歌的时候只会携带谷歌的cookie而不会携带百度的cookie反之,访问百度的服务器的时候也就只能携带百度的cookie,cookie在浏览器由客户端来管理,浏览器能保证百度只能操作百度的cookie而不会操作谷歌的cookie。从而保障了用户的隐私安全。
  2.     因为cookie一般存储于客户端交互的信息,所以一般限制在4KB大小
  3.     cookie的时间是不固定的,可是设置为几分钟,也可以设置为几个月。

想要查看一个页面的cookie十分简单,只需要在控制台上输入:document.cookie即可,如下图:

二、LocalStorage和SessionStorage

这个两个都是前端的数据存储机制,一般两者的常用api如下:

  •     用setItem(),和getItem()来设置和获取本地存储。
  •     用removeItem()可以清除某个特定的变量缓存。
  •     通过key()获取所有的本地缓存的key集合。
  •     通过clear()清空本地缓存。

LocalStorage和SessionStorage有什么区别呢。?

 LocalStorage满足同源策略(同协议,同域名,同端口)下的页面是可以共享LocalStorage的。而不同页面直接是不能共享SessionStorage的(注意,若是一个页面含有多个iframe,那么他们是可以共享SessionStorage的

我们看如下代码:

<body>
    <div>测试iframe框架</div>
    <iframe src="./tree.html" frameborder="0" id="frame1" class="frame"></iframe>
    <iframe src="./flex.html" frameborder="0" id="frame2" class="frame"></iframe>
    <iframe src="./insert-frame.html" frameborder="0" id="frame3" class="frame inner-frame"></iframe>
</body>
//insert-frame.html
<script>
    //我是在内嵌iframe insert-frame.html中设置的
    window.localStorage.setItem('localSession-key','localSession-value-我是在内嵌iframe insert-frame.html中设置的')
    window.sessionStorage.setItem('localSession-key','localSession-value-我是在内嵌iframe insert-frame.html中设置的')
</script>

上述代码我们在一个住页面中设置了三个iframe,然后在第三个内嵌的iframe中分别设置了LocalStorage和SessionStorage。我们在浏览器的Application中查看一下我们设置的值:

这时候我们先验证一下LocalStorage满足同源策略,在同源下打开另一个页面(上述截图注意url部分页面是iframe.html),我们打开同源下另一个页面,border-blibli.html

下过如下:

可以看到同源下的另一个页面是共享LocalStorage的。

在看看SessionStorage

可以看到在SessionStorage中是没有的。

下面我们看看 在iframe.html中内嵌了多个iframe是否会共享SessionStorage.

首先先切换ifrme,然后查看Application中的SessionStorage部分,看看是否有这个变量。如下图所示:

我们也可以通过window.sessionStorage.getItem()取出这个值。

三、关于生命周期

localStorage在同源页面下的所有tab都共享的,只要手动不清除,就会永远存在于本地缓存中的。    

sessionStorage是能在单个页面中实现共享,页面关闭之后sessionStorage的信息就会消失(即一个会话结束了)。

四、LocalStorage与Cookie的比较

  • localStorage中的文本信息只会存在于本地浏览器,不会随着HTTP请求发送到后端,除非手动设置,而Cookie会随着同源的HTTP请求发送到服务端
  • localStorage的存储大小一般要大很多,一般是几兆,各个浏览器有所不同,而Cookie只有4KB
  • localStorage中的信息只要不手动删除就会永远存在,而cooike的有效期是有限的,有默认值,也可以手动设定,而且和窗口无关
  • 可以给localStorage设置监听storage事件(对storage做任何的修改都会在文档上触发storage事件),做数据变更的后续处理。

好了,今天就写到这儿,若大家有什么心得体会,欢迎一起交流。

### 回答1: localstoragesessionstorage是HTML5中新增的两个Web存储API,用于在浏览器端存储数据。 localstorage是一种持久化存储方式,数据存储在浏览器中,即使关闭浏览器或电脑,数据也不会丢失。它可以存储大量数据,但是只能存储字符串类型的数据。 sessionstorage是一种会话存储方式,数据存储在浏览器中,但是只在当前会话中有效。当关闭浏览器或者当前会话结束时,数据会被清除。它也只能存储字符串类型的数据。 两者的使用方法类似,都是通过setItem、getItem、removeItem等方法进行操作。但是需要注意的是,由于存储的数据是明文存储在浏览器中,所以不要存储敏感信息。 ### 回答2: 本地存储localStorage)和会话存储(sessionStorage)是HTML5提供的两种新的Web数据存储机制。 localStorage 是 HTML5 新增的持久化数据储存技术,它可以让你的应用从浏览器中存储数据,即使用户关闭浏览器之后依然可以保存数据。在同一个浏览器中,localStorage 存储的数据是可以被不同的页面所共享的。localStorage 存储的数据可以长期存储,适用于存储一些重要的信息,如用户的偏好设置等。 sessionStoragelocalStorage 非常相似,区别在于 sessionStorage 存储的数据只存在于会话期间,当用户关闭浏览器或者选项卡时会被删除。如果用户重新打开同一浏览器或选项卡,将无法访问之前存储的数据。sessionStorage 主要用于存储同一会话期间所需的数据。比如,模态框中代码常常使用 sessionStorage 来临时存储一些数据,以便在模态框关闭后能够保持数据的一致性。 使用 localStoragesessionStorage 都十分简单。首先需要检查当前浏览器是否支持这两种 API。接下来使用 JavaScript 实现数据的存储和访问即可。通常情况下,将数据存储到 localStoragesessionStorage 中时,用字符串 JSON.stringify() 把 JavaScript 对象转换成 JSON 字符串,然后再存储到本地存储即可。访问时需要使用 JSON.parse() 把字符串转换成一个 JavaScript 对象,便于调用和操作。 总之,localStoragesessionStorage 都是很重要的数据存储方式,开发者可以根据应用的需求选择合适的存储方式。 ### 回答3: localstroage和sessionstroage是HTML5中提供的两种本地存储方式,相较于传统的cookie,两者有着更大的存储空间和更简单的操作方式。 localstroage是一种持久化存储方式,一旦数据存储在localstroage中,即使关闭浏览器或电脑,数据依然能够保持,请注意这里的“持久化”并不是指一直存储数据,而是一直到指定时间才会过期。它支持键值对的存储方式,可以通过JS代码对其进行读取、新增、修改和删除操作。localstroage的存储容量相对于cookie来说更大,一般为5MB左右。 sessionstroage是一种会话存储方式,只要浏览器处于打开状态,数据就会一直保持有效。当关闭浏览器后,数据就被清空了。sessionstroage同样支持键值对的存储方式,并且与localstroage不同的是,即使用户开启了多个窗口或标签页,它们之间的sessionstroage也都是独立的。sessionstroage的存储容量也与localstroage类似,一般为5MB左右。 这两种本地存储方式的使用场景也不尽相同。localstroage适用于需要长期存储数据的场合,比如存储用户设置的偏好等;而sessionstroage则更适用于诸如购物车等需要暂存数据的场合。 需要注意的是,这两种存储方式虽然会将数据存储在用户的本地磁盘上,但是其中的数据并不是加密的,所以不要在其中存储敏感信息,以免引发安全问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

问白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值