龙空技术网

前端面试:数据存储Cookie、SessionStorage、LocalStorage知多少

尚硅谷教育 115

前言:

当前你们对“session存储数据的方式”大约比较看重,大家都想要知道一些“session存储数据的方式”的相关知识。那么小编在网络上网罗了一些对于“session存储数据的方式””的相关内容,希望兄弟们能喜欢,姐妹们快快来学习一下吧!

在前端开发中,往往会将有些不经常更改的数据缓存到本地,比如用户信息。前端本地缓存的方式有多种,比如SessionStorage、localStorage 以及 cookies 等。那么这个几个缓存有什么区别,各自又有什么特点呢?将是本文分享的重点。

一、cookie

1. cookie是什么

网络早期最大的问题之一是如何管理状态。简而言之,服务器无法知道两个请求是否来自同一个浏览器。当时最简单的方法是在请求时,在页面中插入一些参数,并在下一个请求中传回参数。这需要使用包含参数的隐藏的表单,或者作为URL参数的一部分传递。这两个解决方案都手动操作,容易出错。cookie出现来解决这个问题。

2. cookie原理

第一次访问网站,浏览器会发送一个请求,服务器响应这个请求,会将cookie放进响应体中。

第二次访问网站,浏览器发送的请求带有cookie,服务器会辨别这个用户的身份。

2. cookie的属性

(1)Name:cookie的名字,一个域名下绑定的cookie的name不能相同。如果是相同的name则会被覆盖。

(2)value:每个cookie拥有的属性,表示cookie的值。

(3)domain:cookie的域名。cookie绑定的域名,如果没有设置,自动绑定当前执行语句的的域。同一个域名下的二级域名也是不可以交换cookie的。

(4)path:path是默认属性’/',匹配web路由。

(5)Expires:expires是cookie的有效期。一般浏览器的cookie是默认存储的,关闭浏览器结束会话,cookie就会被删除。

如果想要cookie续存一段时间,可以通过设置expires有效期。

expires现在被Max-Age取代:Max-Age,是以秒为单位的,Max-Age为正数时,cookie会在Max-Age秒之后,被删除;当Max-Age为负数时,表示的是临时储存,不会生出cookie文件,只会存在浏览器内存中,且只会在打开的浏览器窗口或者子窗口有效,一旦浏览器关闭,cookie就会消失;当Max-Age为0时,删除cookie,因为cookie机制本身没有设置删除cookie,失效的cookie会被浏览器自动从内存中删除,所以,它实现的就是让cookie失效。

(6)secure:安全。http无状态无加密,不安全协议容易被攻击挟持。比如你在浏览页面的时候是不是会有小广告出来。这个secure属性为true的时候,这个时候的cookie只会在https和ssl等安全协议下传输。不能对cookie加密,绝对安全保证做不到。

(7)httpOnly:安全的 Cookie 需要经过 HTTPS 协议通过加密的方式发送到服务器。即使是安全的,也不应该将敏感信息存储在cookie 中,因为它们本质上是不安全的,并且此标志不能提供真正的保护。

3. cookie两种类型—会话cookie和永久性cookie

(1)一种是Session Cookies:客户端关闭,数据删除,永久丢失。没有指定的Expires/Max-Age指令,存储在内存。

(2)一种是Persistent Cookies:客户端关闭,数据不会删除。当Expires或者Max-Age过期,才会删除数据,存储在磁盘。

4.cookie的缺点

存储大小有限最大4KBhttp请求时会自动发送给服务器, 增加了请求的数据量原生的操作语法不太方便操作cookie浏览器可以设置禁用

二、SessionStorage

SessionStorage 顾名思义就是存在与会话阶段,当会话结束时,SessionStorage 存储的数据即会失效。那么关键来了什么才表示会话结束?其实在浏览器中一个活动标签页即代表一个会话Session,如果当前标签页被关掉即代表,当前会话结束,此时当前 SessionStorage 中存储的数据就会被浏览器自动销毁。

1.SessionStorage的用法

sessionStorage.setItem(key,value):存储数据,接收2个参数,一个是 key,一个是 value。

sessionStorage.getItem(key):获取数据,接收1个参数,参数为 key,可获取 value。

sessionStorage.removeItem(key):移除指定数据,接收1个参数,参数为 key,移除相应的 value。

sessionStorage.clear():移除所有数据,无参数。

//存储缓存数据

sessionStorage.setItem("name", "jack");

sessionStorage.setItem("age", 18);

//获取缓存数据

var name = sessionStorage.getItem("name");

var age = sessionStorage.getItem("age");

console.log(name)//"jack"

console.log(age)//18

//移除指定缓存

// sessionStorage.removeItem("name");//移除name缓存

//移除所有缓存

// sessionStorage.clear(); 移除所有缓存

// 获取引用类型

//存储缓存数据

sessionStorage.setItem("data", JSON.stringify({ name: "jack", age: 18 }));

// 获取缓存数据

var data = JSON.parse(sessionStorage.getItem("data"));

console.log(data)//{name:"jack",age:18};

2.SessionStorage失效时间

sessionStorage的生命周期仅在当前会话有效。sessionStorage引入了“浏览器窗口的概念”。sessionStorage在同源窗口中始终存在数据,只要浏览器窗口没有关闭,刷新或者重新进入页面数据依然存在。关闭浏览器窗口后数据会被删除。再次独立打开同一个窗口同一个页面,sessionStorage也是不一样。

3.SessionStorage存储的位置

sessionStorage都保存在客户端,一般不与服务器进行通信交互。

4.SessionStorage存储的大小

sessionStorage存储数据大小一般是5MB

三、localStorage

localStorage理论上来说是永久有效的,即不主动清空的话就不会消失,即使保存的数据超出了浏览器所规定的大小,也不会把旧数据清空而只会报错。但需要注意的是,在移动设备上的浏览器或各Native App用到的WebView里,localStorage都是不可靠的,可能会因为各种原因(比如说退出App、网络切换、内存不足等原因)被清空。

1.localStorage的用法

localStorage.setItem(key,value):存储数据,接收2个参数,一个是 key,一个是 value。

localStorage.getItem(key):获取数据,接收1个参数,参数为 key,可获取 value。

localStorage.removeItem(key):移除指定数据,接收1个参数,参数为 key,移除相应的 value。

localStorage.clear():移除所有数据,无参数。

//存储缓存数据

localStorage.setItem("name", "jack");

localStorage.setItem("age", 18);

//获取缓存数据

var name = localStorage.getItem("name");

var age = localStorage.getItem("age");

console.log(name)//"jack"

console.log(age)//18

//移除指定缓存

// localStorage.removeItem("name");//移除name缓存

//移除所有缓存

// localStorage.clear(); 移除所有缓存

//存储缓存数据

localStorage.setItem("data", JSON.stringify({ name: "jack", age: 18 }));

//获取缓存数据

var data = JSON.parse(localStorage.getItem("data"));

console.log(data)//{name:"jack",age:18};

2.localStorage的失效时间

localStorage的生命周期是永久的,关闭页面或者浏览器之后localStorage中的数据也不会消失。localStorage删除数据要手动删除,否则数据永远不会消失。

3.localStorage存储的位置

localStorage都保存在客户端,一般不与服务器进行通信交互。

4.localStorage存储的大小

localStorage存储数据大小一般是5MB

四、localStorage与sessionStorage区别

1.相同点

纯浏览器端存储, 存储空间在 2.5M 到 10M 之间(各浏览器不同), 请求时不会自动携带只能保存文本, 如果是对象或数组, 需要转换为JSON

2.不同点

localStorage保存在本地文件中, 除非编码或手动删除, 否则一直存在sessonStorage数据保存在当前会话内存中, 关闭浏览器则清除

五、cookie与其他两种的区别

存储的容量大小,cookie最大只有4KB请求时是否自动携带API的易用性

六、总结

Cookie、SessionStorage、 LocalStorage都是浏览器的本地存储。它们的共同点:都是存储在浏览器本地的。它们的区别:cookie是由服务器端写入的,而SessionStorage、 LocalStorage都是由前端写入的,cookie的生命周期是由服务器端在写入的时候就设置好的,LocalStorage是写入就一直存在,除非手动清除,SessionStorage是页面关闭的时候就会自动清除。cookie的存储空间比较小大概4KB,SessionStorage、 LocalStorage存储空间比较大,大概5M。Cookie、SessionStorage、 LocalStorage数据共享都遵循同源原则,SessionStorage还限制必须是同一个页面。在前端给后端发送请求的时候会自动携带Cookie中的数据,但是SessionStorage、 LocalStorage不会。

由于它们的以上区别,所以它们的应用场景也不同,Cookie一般用于存储登录验证信息SessionID或者token,LocalStorage常用于存储不易变动的数据,减轻服务器的压力,SessionStorage可以用来检测用户是否是刷新进入页面,如音乐播放器恢复播放进度条的功能。

标签: #session存储数据的方式 #session存储数据的方法