网页储存区 - localStorage & sessionStorage

网页可以储存使用者偏好,可以在关掉网页後重新访问时纪录使用者上次浏览的状态,能做到这些神奇的事是因为浏览器中有一个不为人知(可能只有我不知道)的储存区域(Web Storage),让网页可以使用浏览器提供的API在使用者的电脑上储存资料,如此一来,浏览器就能像人类一样有记忆能力了。

在 HTML5 出现前,应用程序的资料是存放在 cookie 中,但因为 cookie 的储存空间有限(上限约4KB),HTML5 之後有了 Web Storage 物件,可以储存更多的资料量,下图是各家浏览器提供的储存空间


图片来源:维基百科

除了储存空间差异,Web Storage 物件还有以下几个特点:

  1. Storage 物件的特性必须是字串
  2. 只能用 JavaScript 操作,服务器无法透过 HTTP-Header 操控此物件
  3. 具有相同来源的文件才能共用 Web Storage 资料,来源不同的文件就不能读取或覆写彼此的资料

小注解:文件的来源是由它的协定,主机名称及通讯埠所定义。例如说: http://example.comhttps://example.com 就不是同来源(因为协定不同)

Web Storage分成两大类,分别是:

  1. localStorage:
    • 除非手动删除资料否则储存的资料不会过期(关闭视窗後资料不会消失)
    • 相同来源,不同分页的文件可以共用相同的 localStorage 资料
    • 较常使用
  2. sessionStorage:
    • 浏览器视窗关闭後所储存的资料会被删除
    • 相同来源,不同分页的文件会各自有独立的 sessionStorage 资料
    • 较少使用

如何操作

储存资料 setItem(key, value)

localStorage.setItem('name', 'ironman'); //存入一笔资料

取得指定key值的资料 getItem(key)

localStorage.getItem('name');  //取得资料

删除指定key值的资料removeItem(key)

localStorage.removeItem('name'); 
localStorage.getItem('name'); // null

清除储存区的所有资料 clear()

//存入两笔资料
localStorage.setItem('name', 'ironman')
localStorage.setItem('age', 15)

// 清除所有资料
localStorage.clear()
localStorage.length // 0

最重要的小事

  1. 因为 Storage 物件只储存字串,当存入的值是物件时,要记得先使用 JSON.stringify() 再存入,否则浏览器会使用 toString() 方法转成字串存入,反之,当从 Web Storage 取得储存的资料时,也要记得使用JSON.parse()将字串转回原本的型别。

  2. 根据JavaScript大全,因为任何客户端资料储存区都不涉及加密,加上共用该装置的使用者或是存在於该装置上的恶意软件都能够存取这些资料,所以不建议使用客户端储存区来存放密码,金融帐户号码等敏感资讯。

/images/emoticon/emoticon29.gif

参考资料:

JavaScript大全
MDN
从Cookie到Storage
JAVASCRIPT.INFO


<<:  .Net Core Web Api_笔记15_api结合ADO.NET资料库操作part3_资料删除

>>:  待更新

[ 卡卡 DAY 18 ] - React Native animated 来简单使用 translate 效果

记得第一次使用到 css 的 animation 跟 transform 系列效果 做了很多厉害的...

Day 15:专案02 - PTT C_Chat版爬虫02 | BeautifulSoup

大家安安,欢迎来到铁人赛的第15天! 不知不觉已经过完一半了,再努力坚持下去吧! 昨天已经将网站的原...

【Day27】反馈元件 - Progress circle

元件介绍 Progress circle 跟上一篇 Progress bar 一样是能够展示当前进度...

Mac机必备--超实用软件推荐

当你第一次购买 Mac 时,除了学习和适应使用之外,你还探索了击键技巧。 这时候,你需要用好软件才有...

第四章之三

续前面所述,这次要跟各位介绍的是档案上传与资料库功能,Filemanager应在其他平台有都会有类似...