浅谈客户端存储

刺骨的言语ヽ痛彻心扉 2022-08-31 11:15 278阅读 0赞

​微信公众号: [大前端驿站]

关注大前端驿站。问题或建议,欢迎公众号留言。

与特定用户相关的信息应该保存在用户的机器上。无论是登录信息、个人偏好,还是其他数据, Web 应用程序提供者都需要有办法把它们保存在客户端,本篇旨在浅谈客户端存储的解决方案

HTTP cookie规范要求服务器在响应 HTTP 请求时,通过发送 Set-Cookie HTTP 头部包含会话信息。
cookie是与特定域绑定的。设置 cookie 后,它会与请求一起发送到创建它的域。这个限制能保证 cookie 中存储的信息只对被认可的接收者开放,不被其他域访问

  1. HTTP/1.1 200 OK
  2. Content-type: text/html
  3. Set-Cookie: name=value; domain=.wrox.com; path=/; secure
  4. Other-header: other-header-value

这个头部设置一个名为”name”的 cookie,这个 cookie 在 2007 年 1 月 22 日 7:10:24 过期,对www.wrox.com及其他 wrox.com 的子域(如 p2p.wrox.com)有效
这里创建的 cookie 对所有 wrox.com 的子域及该域中的所有页面有效(通过 path=/指定)。不过, 这个 cookie 只能在 SSL 连接上发送,因为设置了 secure 标志

javascript处理cookie的方法

  • :document.cookie(返回”name=value”的字符串)
  • :document.cookie = ‘love=web’
  • :设置过期时间为过去的时间

HTTP-only的cookie只能在服务器上读取,JavaScript 无法取得这种 cookie的值

Web Storage

Web Storage包含localStorage 和 sessionStorage。这两种浏览器存储 API 提供了在浏览器中***不受页面刷新影响***而存储数据的两种方式
localStorage 是 永久存储机制,sessionStorage 是跨会话的存储机制.

javascript处理storage的方法

  • getItem(name):取得给定 name 的值
  • key(index):取得给定数值位置的名称
  • length:获取长度
  • setItem(name, value):设置给定 name 的值
  • removeItem(name):删除给定 name 的名/值对
  • clear():删除所有值

存储事件

每当 Storage 对象发生变化时,都会在文档上触发 storage 事件

  1. window.addEventListener('storage', event => {
  2. console.log(event.domain) // 存储变化对应的域
  3. console.log(event.key) // 被设置或删除的键
  4. console.log(event.newValue) // 键被设置的新值,若键被删除则为 null
  5. console.log(event.oldValue) // 键变化之前的值
  6. })

对于 sessionStorage 和 localStorage 上的任何更改都会触发 storage 事件,但 storage 事 件不会区分这两者

注意Storage 类型只能存储字符串。非字符串数据在存储之前会自动转换
为字符串。 注意,这种转换不能在获取数据时撤销

IndexedDB

IndexedDB 是类似于SQL 数据库的结构化数据存储机制。但IndexedDB 存储的是对象,而不是数据表。对象存储是通过定义键然后添加数据来创建的。游标用于查询对象存储中的特定数据,而 索引可以针对特定属性实现更快的查询…

上述客户端存储方式都有容量的限制,最重要的是,因为这些数据没有加密, 所以要注意不能使用它们存储敏感信息

ddd906a1dc203fbe1e9c3cc07f798028.gif

关注下方【大前端驿站】

让我们一起学习,一起进步

e43524e51fd97a33555bdefed65b3ab1.png

【分享、点赞、在看】三连吧,让更多的人加入我们~~

发表评论

表情:
评论列表 (有 0 条评论,278人围观)

还没有评论,来说两句吧...

相关阅读

    相关 C++存储

    本文将为大家简单介绍C++中堆、栈、自由存储区以及全局静态存储区和常量存储区的内容,希望能够为广大C++爱好者提供些许帮助。 在C++中,内存分成5个区,他们分别是堆、栈、自

    相关 移动开发技术

    浅谈移动端开发技术 前言 之前上家公司主要是做移动端 H5 开发的,但相关技术和配套体系已经很成熟了,很难接触到背后的这套体系。 在现在的公司也做了一些零散的 H