前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[浏览器系列] : 客户端本地存储

[浏览器系列] : 客户端本地存储

作者头像
程序员海军
发布2021-10-11 10:52:04
1.5K0
发布2021-10-11 10:52:04
举报
文章被收录于专栏:前端笔记ing前端笔记ing

客户端存储

在目前的现代浏览器中主要有以下几种存储方案 1.cookie 2.localStorage 3.sessionStorage 4.indexDB

Cookie

Cokkie 定义

Cookie 是客户端存储数据的选项之一,它主要用于客户端存储会话信息。 它是由服务器在响应 HTTP 请求时,通过发送 Set-Cookie HTTP 头部包含的会话信息。 浏览器将会话信息存储起来,并在之后的每一个请求中携带Cookie 数据返回给 服务器,来做唯一标识通信。

Cookie 限制

Cookie 是与特定域绑定的。这个限制可以保证只对指定的接受者开放,不能被其它人访问。 Cookie 通常 遵循的限制规则:

    1. 不能超过300个Cookie
    1. 每个Cookie 不能超过4096 字节
    1. 每个域不能超过 20 个 Cookie
    1. 每个域不能超过 81920 字节

    如果 Cookie 总数超过了 单个域的 上限,浏览器会删除之前的Cookie。 不同浏览器表现不一样

  • IE 和 Opera 会按照最近最少使用的原则删除之前的Cookie.
  • Firefoxs 随机删除之前的 Cookie

如果创建的Cookie 字节超过了最大限制,则Cookie 会被删除。

Cookie 构成

名称

属性

名称 [ name ]

cookie 唯一标识名称,不区分大小写,建议小写。

值 [ value ]

存储在 cookie 字符串值

域 [ Domain]

cookie 有效域的访问。

路径 [Path=PATH]

指定哪些路由路径必须包含cookie 才可以访问

过期时间 [Expres=DATE]

表示cookie 什么时候被删除。默认情况下(不设置过期时间),浏览器在关闭时,cookie都会删除

安全标 [Secure ]

设置之后,只在使用SSL安全链接情况下才会把cookie 发送给服务器。

读取cookie [HttpOnly]

设置后只能在服务器上读取,不能再通过JavaScript读取Cookie

缺点

  • 容量问题:有上限,最大只能有 4KB
  • 性能问题:同一个域名下的所有请求,都会携带 Cookie,某些请求(a,img,link等标签发出的请求)可能不需要此cookie,会加大传输的头部,损耗一定时空开销
  • 安全问题:客户端可以通过一定手段(脚本,devtools,本地存储的文件,修改host文件)获取到,存在XSS,CSRF等安全问题
解决安全问题的方案

  • 减短cookie的有效时间
  • 添加HttpOnly属性:防止本地脚本读取cookie
  • 服务端对传送的cookie加密
  • 添加Secure属性:使用https协议传输
  • 设置samesite属性为需要的值:严格卡控cookie的携带范围

Web Stronge

Web Stronge 的出现 主要是解决 cookie 的问题,存储不需要频繁发送服务端的数据。

它提供了 跨会话 持久化存储大量数据的机制。

Web Stronge 中 定义了两个对象

localStronge

永久存储

sessionStronge

会话存储

Stronge 提供的 方法

clear( ): 删除所有制 getItem( ): 获取指定name 值 removeItem( ) : 删除给定 name 键值对 setItem( ) : 设置给定name 值

优点

  • 存储容量大:不同浏览器,存储容量可以达到 5-10M,针对一个域名
  • 存储于客户端,不会服务端发生通信
缺点

  • 只能存储字符串,JSON对象需要转换为json string 存储
  • 只适用于存储少量简单数据
  • localStorage需要手动删除

sessionStronge

sessionStronge 对象只存储会话数据,当页面关闭时,意味着会话结束,那么数据会清空。当页面 刷新 / 崩溃 时,数据还会保存在浏览器中,

使用 sessionStronge
代码语言:javascript
复制
// 设置会话key-value
// 属性存储数据
sessionStorage.name = '前端自学社区'
// 方法存储数据
sessionStorage.setItem('title', '测试') 
                       
                       
// 获取指定name值
sessionStorage.getItem('name')



// 删除会话数据
// 删除所有sessionStronge
sessionStorage.clear
// 删除指定key
sessionStorage.removeItem('name')
                          
                          
// 获取sessionStronge 个数
sessionStorage.length

localStronge

本地数据持久化,永久的保存在浏览器中,除非主动删除。 由于它 是 Stronge 的实例, 它拥有 Stronge 所有的方法,用法和 sessionStronge 一样。

IndexedDB

运行在浏览器上的非关系型数据库 依旧受同源策略限制

学习资源

本文将不讲述了,日常开发用的少。

  • [使用 IndexedDB] : https://developer.mozilla.org/zh-CN/docs/Web/API/IndexedDB_API/Using_IndexedDB
  • [浏览器数据库 IndexedDB 入门教程] : http://www.ruanyifeng.com/blog/2018/07/indexeddb.html

参考

  • 《JavaScript 高级程序设计第四版》
  • MDN 资源
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-03-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端自学社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 客户端存储
    • Cookie
      • Cokkie 定义
      • Cookie 限制
      • Cookie 构成
      • 缺点
      • 解决安全问题的方案
    • Web Stronge
      • 优点
      • 缺点
    • sessionStronge
      • 使用 sessionStronge
    • localStronge
      • IndexedDB
        • 学习资源
      • 参考
      相关产品与服务
      对象存储
      对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档