在本篇文章中,我们会用通俗易懂的语言简要介绍cookie和浏览器存储机制,然后具体展开总结一下浏览器存储在面试中八股常考点,文章有点长,看完大概需要花费8分钟~
cookie是一种存储机制,当我们在请求数据的时候是没有任何cookie的。
具体的过程我们可以用下图表示:
从图中我们可以看到,首先由客户端向服务器发送请求,服务器收到请求之后,就会在请求头中设置set-cookie
,set-cookie
的值就是后续客户端需要携带的cookie
信息,当客户端再次向服务器请求数据的时候,就需要携带这个cookie
信息,值得注意的是,除了第一次请求数据不需要携带cookie
之外,其他每一次请求数据都需要携带cookie
;
这里我们注意到一个问题,假如每次发送都携带很大量的
cookie
数据,cookie
如果本身就很大的话,不是在传输过程中占用很大的带宽和资源,而且cookie
是在94年设计出来的,那个时候的带宽资源比现在要紧张多了,因此把cookie
设置的很小,一般小于4kb,甚至更小;
下面我们具体举例来说明cookie
的使用:
首先是很常见的登录页面,该页面由一个表单组成,如下所示:
<form >
<label>用户名</label>
<input type="username">
<label>密码</label>
<input type="password">
<input type="checkbox" id="remmemberMe">
<label for="remmenberMe">记住我</label>
<input type="submit" value="登录">
</form>
在页面中展示如下所示:
这里点击checkbox
,默认记住密码。
接下来我们引入js
代码,来控制cookie
:
<script>
const username=document.querySelector('input[type="username"]');
const checkbox=document.querySelector('input[type=="checkbox"]');
const submit=document.querySelector('input[type="submit"]');
submit.addEventListener('click',e=>{
if(checkbox.checked && username.value!=''){
let key='username';
let value=encodeURIComponent(username.value);
let twodays=2*24*60*60;//这里的单位是秒
document.cookie=`${key}=${value};max-age=${twodays}`;
}
e.preventDefault();
});
</script>
这里设置cookie
的基本语法就是document.cookie
,不能省略掉前端的document.
,且cookie
的内容一般是键值对,且经过了编码。
这个时候我们打开liveServer
,输入username=123
,密码为123
,并勾选记住密码,并点击提交,打开后台应用程序
,我们可以看到cookie
:
随着科技的进步,网页的功能越来越丰富,有很多的个人设置并不需要获取,比如浏览器的浏览网页的时候的主题设置,这些个人设置完全可以保存在客户端里面,随着HTML5的出现,就出现了web存储,其中两个重要的对象,就是
localstorage
和sessionstorage
;
具体使用localstorage和sessionstorage可以通过下图来描述整个过程:
如果这里用的web
存储是locastorage
,就会永远保存在浏览器里面,当然,可以自行删除;如果使用的是sessionstorage
,也会保存在浏览器里面,但是只要关闭浏览器,就会被删除,localstorage
虽然被保存下来,但是他本身不参与服务器通信,这样看web
存储的容量比cookie
大的多;
这里就不具体举例了,如果我们要在js中设置localstorage,就直接设置localstorage.setItem(key,value)
;
如果要获取信息,就直接设置localstorage.getItem(key)
;
这里的sessionstorage是一样的,就不作过多阐述;
从缓存位置上来说分为四种,并且各有优先级,当依次查找缓存且都没有命中的时候,才会去请求网络。
四种缓存分别是(优先级按从高到低排列):
⼤的JS 、CSS⽂件直接丢进磁盘,反之丢进内存
内存使⽤率⾼时,⽂件优先进⼊磁盘
从上面的解释可以知道当客户端第一次向服务器请求数据后,服务器会返回setcookie,字段设置如下:
Set-Cookie: name=value; secure
,这个表示仅当在(HTTPS)安全连接的情况下才会进⾏CookieSet-Cookie: name=value; HttpOnly
表示使用document.cookie无法读取Cookie的内容;strict
表示任何情况都不允许作为第三方cookie;这里描述用户端携带的Cookie字段:
上面setCookie的设置在这里是通用的。
就不作过多阐述
特点:
缺点
和localStorage相似,唯⼀不同就是⽣命周期,⼀旦页⾯关闭,sessionStorage将会删除数据
相同点
window.localStorage
localStorage
⽤于长期登录,适合长期保存在本地的数据。sessionStorage
优点
sessionStorage
很好⽤