那些被忽略但很好用的 Web API / SessionStorage

狡兔有三窟,储存用户端的资料当然也要有三个。

相信大家应该都有遇过需要将资料储存在用户端的需求,像是将後端的 SessionID 储存在 Cookie,或是将一些静态资料存在 LocalStorage,但今天想要分享的是一个大家比较少选择的 API - SessionStorage。


Cookie & LocalStorage

在介绍 SessionStorage 之前,我们先来复习一下 Cookie 和 LocalStorage 的一些特性,这样之後如果遇到类似情境就可以依照需求选择更适合的 API。

# Cookie

  • 每笔可储存的资料大小约为 4KB
  • 有时效的限制,到期後就会自动删除
  • 每次进行 http request 时所有 cookie 会一并送出
  • 有同源政策,无法读取其他网站设定的 cookie
  • 明码储存,不适合储存机敏性资料

根据上面的特性,我们就知道 Cookie 比较适合储存小量、以时效性的资料,而且也因为每次发送请求时都会送出,所以才会被拿来储存 SessionID,以供後端进行验证。

# LocalStorage

  • 每笔可储存的资料大小约为 5MB
  • 没有时效限制,除非使用者手动删除,不然会一直存在
  • 进行 http request 时并不会送出
  • 有同源政策,无法读取其他网站设定的 localStorage
  • 明码储存,不适合储存机敏性资料

跟 Cookie 比较不同,LocalStorage 就可以存一些比较大型、长期性的资料,常常会被拿来当作用户端的快取,以减少 fetch 资料的次数。

 

SessionStorage

SessionStorage 则是跟 LocalStorage 几乎一样,且存放大小也是 5MB,最大的不同点在於,它会受到分页的限制,也就是说就算两个分页都处在同一个网站中,它们的 SessionStorage 也不会共用,且只要把分页关掉也同时会把 SessionStorage 给删除。

SessionStorage 这样的特性其实就有一个很实用的情境,那就是表单内容的储存,在网页中时常会有表单需要用户填写,例如基本资料、订单资料、意见调查等等,但如果使用者在填写过程中不慎离开页面或是重新整理,那可就功亏一篑了。

这时候 SessionStorage 就可以派上用场,把使用者填到一半的内容给储存起来,只要使用者不是关掉分页,离开再回来都可以保留填写进度。而且就算使用者开了好几个分页进行不同订单的填写,分页间的 SessionStorage 资料也不会相互干扰。

# SessionStorage.setItem

SessionStorage 就连 methods 也都和 LocalStorage 是一样的,setItem 可以让我们下增/修改一笔 SessionStorage:

sessionStorage.setItem("key", "value");
// 如果想要储存物件、阵列等复杂型别,可以先进行字串化
sessionStorage.setItem("object", JSON.stringify({ key: "value" }));

# SessionStorage.getItem

getItem 则是可以帮我们读取 SessionStorage 中的某笔资料:

const data = sessionStorage.getItem("object");
console.log(JSON.parse(data));

# SessionStorage.removeItem

removeItem 则是删除某笔资料:

const data = sessionStorage.removeItem("object");

# SessionStorage.clear

clear 会将 SessionStorage 中的所有资料都清除:

sessionStorage.clear();

 

不晓得今天认识了 SessionStorage 之後,各位有没有灵光一闪,突然觉得之前某些资料其实可以存在 SessionStorage 就好了呢?之後如果再有这种要在用户端储存资料的需求,大家就可以再多思考一下,选出符合情境的 Storage API 罗。


<<:  Day13 Redis应用实战-List操作

>>:  Day14 Sideproject(作品集) from 0 to 1 - 前端专案架构

Day 01 : 导言 - 知识是如何形成的?

【Obsidian 双向链结型笔记工具研究与应用,打造属於个人的专业知识图谱】 Day 01 : 导...

为你自己学 Laravel - Day 29 前端生态圈

嘿~~ 各位好,我是菜市场阿龙! Youtube 频道:https://www.youtube.co...

33岁转职者的前端笔记-DAY 25 JavaScript 回圈语法笔记

定义 重复性的执行某个操作,一直做一样的事情,有终止条件。 较常用的回圈 for while do…...

ServiceNow CIS-SIR Exam - The Real World Experience

ServiceNow CIS-SIR Exam - The Real World Experienc...

推论统计-z检定、t检定是什麽?

前面我们已经认识了假设检定的5步骤,接下来我们要进行:选择检定统计量(test statistic)...