localStorage、sessionStorage、cookie、session 之间有什么区别

172 阅读3分钟

(一) localStorage与sessionStorage(浏览器)

(1) localStorage(客户端浏览器)(2) sessionStorage(客户端浏览器)
生命周期关闭浏览器后数据依然保留
永久存储,除非手动清除,否则一直在
关闭浏览器或者标签后即失效
作用域相同浏览器不同标签同源情况下可以共享(例如:同一网站的不同页面可以共享)只在当前标签可用,当前标签的iframe中且同源可以共享
存储5M+5M+

[ 延伸问题 ]

(1)localstorage 怎么存储图片⭐⭐⭐⭐

  • 创建一个canvas对象,把图片保存在 canvas 中,然后 canvas 对象 toDataUrl,在把 dataurl 数据存储在 localstorage 中。
  • 或者使用blob 二进制流 存储,canvas 对象toBlob

(2)如何实现 localstorage 定时清除⭐⭐⭐⭐

  • 自己重写一个 set 方法,内部逻辑就是添加一个现在的时间以及有效时长
  • 再重写一个 get 方法,每当 get 的时候先进行判断是否过期
    如果过期就删除,并返回 null,没过期的话正常返回

(二)cookie(客户端)

一开始cookie 不是用来存储的,而是为了弥补 http 的状态的不足,http 是无状态协议。每当向服务器发起请求、请求结束,下次发送请求的时候服务端就不知道是谁了,所以 cookie 是用来弥补这个不足的

1. cookie 的生命周期:

  • cookie 是保存在客户端的,一般由 server 设置值及过期时间
  • cookie 没有提供删除的 API,如果想要删除的 的话可以把 max-age 设为0或者把 expire 设置为当前时间(立刻过期)即可

2. cookie 的缺陷

标题
① 容量缺陷cookie 的存储空间只有4KB
② 性能缺陷有时候 cookie 我们用不到,但是不管用不用得到,http 在发送请求的时候一定会带着 cookie,这就造成了性能的浪费
③ 安全缺陷cookie 在 http 下很容易被非法用户获取。尤其是设置了 http-only 为 false 的情况下,这个时候 js 可以读取到 cookie,很容易受到 xss攻击

3. cookie 的属性

属性值解释
http-only为true时,不能被客户端更改访问,防止 XSS 攻击
max-age生效后存活的时间
Secure是否只允许在 https 下传输
expire过期时间

(三)session(服务端)

  • 作用域:session 是保存在服务端
  • session 的运行依赖 sessionId,sessionId 又保存在 cookie 中,
    所以禁用了 cookie之后 session 也是用不了的 如果硬要用也可以,可以把 sessionId 存储在 url 中
  • session一般是用来跟踪用户状态的
  • session 比较安全,因为存储在服务器中
    不过为了减少服务端的压力,很多信息还是推荐存在 cookie 中的

[ 问题回顾 ]

  • 1. localStorage、sessionStorage、cookie、session 之间有什么区别⭐⭐⭐⭐⭐

  • 2. localStorage与sessionStorage的区别?

  • 3. 怎么删除cookie?

  • 4. cookie有什么缺陷?3个

  • 5. Cookie、sessionStorage、localStorage 的区别