三者都是浏览器的本地存储,不同点可以从写入方式、生命周期、存储大小、应用场景等方面说起。
不同点
写入方式
- cookie一般是由服务器端写入,sessionStorage和localstorage由前端写入;
- cookie在发送请求时候会自动被携带在请求头中。
另外,三者的数据共享都遵循同源策略,sessionStorage限制必须是同一个页面。
生命周期
- cookie的生命周期在写入的时候设置;
- localStorage永久性的保存在浏览器中,除非手动清除;
- sessionStorage在页面关闭时候会自动清除;
存储大小
- cookie较小,最大为4kb
- localStorage、sessionStorage为5M
拓展
cookie
之前一直存在一个疑问,就是cookie怎么被自动携带在请求中?
最近用的若依框架中,登录成功前端拿着token存到cookie中,之后发送请求的时候,在请求拦截器中配置在请求头中携带‘Authorization’;
然后我在请求头中也并没有找到cookie啊,那为什么说会自动携带cookie?原来是因为cookie遵循的同源策略。添加‘Authorization’可以很好的避免因为同源策略带来的获取不到cookie、验证不了用户登录信息的问题。
前端写入cookie:在浏览器的控制台document.cookie可以查看浏览器的cookie;通过document.cookie='要存入的cookie'可以存入cookie;
同源策略
同源策略是一种保证浏览器安全访问的约定,同源策略值允许访问同一站点下的资源;同源策略下,如果不是同源的站点,将不能进行以下操作:
- 禁止对不同源的DOM进行操作。主要场景是iframe的跨域情况,不同域名的iframe限制互相访问;
- 禁止使用XHR对象向不同源的服务器地址发起HTTP请求;
- Cookie、localStorage、indexDB无法获取
下期预告:CORS跨域资源共享