客户端存储技术

2023-11-19

Cookie 是一种非常基础的客户端存储方式,得到广泛的支持

创建多个 cookie 的方法

document.cookie = 'name=Jim'
document.cookie = 'age=18'

当创建多个 cookie 时只能像这样一个一个地创建,无法一次性创建多个

同一名字的 cookie 只能存在一个,因此再创建一个同名 cookie 相当于修改原有的 cookie

document.cookie = 'age=20'

此时名为 age 的 cookie 的值由 18 变为了 20

在创建 cookie 时还可以指定元数据,比如默认情况下,cookie 会在浏览器关闭时删除,如果指定一个失效时间,则该条 cookie 可以存储到指定的这个时间

document.cookie = 'age=20; expires=Fri, 31 Dec 2019 23:59:59 GMT'

如果将失效时间设置为过去的时间,会删除该条 cookie,这就是删除 cookie 的方法

读取 cookie 时可以得到当前所有 cookie 组成的字符串

var cookies = document.cookie
console.log(cookies) // "name=Jim; age=20; ..."

很可惜,没有方法来获取指定的某条 cookie,也无法获取 cookie 的元数据

如果需要获取特定的某条 cookie 的值,只能对得到的 cookie 字符串进行操作了

用正则来匹配指定的 cookie 值

var age = /age=([^;]+);?/.exec(document.cookie)[1]

在浏览器开发者工具中可以直接查看和编辑 cookie

cookie

这里有个库可以简单地操作 cookie,JavaScript Cookie

值得一提的是 cookie 通常会随着请求一起提交给后台,因此如果客户端存储太多 cookie 会造成请求体积变大,本身 cookie 存储的量也有限制,不适合存储太多数据,一般情况下都不建议使用 cookie,有更好的选择,就是 Web Storage

Web Storage

Web Storage 分为 Local Storage 和 Session Storage,两者使用方式是一样的,区别只是存储的时间不一样而已

判断浏览器是否支持 Web Storage,当使用哪个的时候就判断哪个

if ('sessionStorage' in window && window.sessionStorage) {
  sessionStorage.setItem('key', 'value')
}

if ('localStorage' in window && window.localStorage) {
  localStorage.setItem('key', 'value')
}

基本使用方式

// 存储
// Web Storage 只能存储字符串值
// 因此对于复杂的数据可以转换为 JSON 格式
localStorage.setItem('names', JSON.stringify(['Jim', 'Lee']))

// 读取
// 对于 JSON 格式的数据需要解析
var names = JSON.parse(localStorage.getItem('names'))

// 删除
localStorage.removeItem('names')

// 全部删除
localStorage.clear()

Session Storage 会在浏览器关闭时删除,而 Local Storage 会在本地持续存储,那么如何给 Local Storage 设置一个有效期呢

方案是可以随着存储的数据同时存储一个时间值,当获取存储数据的时候同时把这个时间值取出来和当前时间比较即可,如果这个存储的时间比当前时间小,则认为该条数据已经超过有效期,并删除该条数据

localStorage.setItem('names', JSON.stringify(['Jim', 'Lee']))
localStorage.setItem('_names_expires', new Date().getTime() + 3000) // 只存储3秒种

if (localStorage.getItem('_names_expires') < new Date().getTime()) {
  // 存储的时间小于当前时间,删除该条数据
  localStorage.removeItem('names')
  // 同时把时间值也删除
  localStorage.removeItem('_names_expires')
}

与 Web Storage 相关的还有一个 storage 事件,当存储的值发生变化时,就会触发该事件

// 绑定事件处理程序
window.addEventListener('storage', function(event) {
  console.log('旧值: ' + event.oldValue)
  console.log('新值: ' + event.newValue)
  console.log('键名: ' + event.key)
})

localStorage.setItem('username', 'Jim')

执行上面的代码,会发现什么都没有发生,因为 storage 事件需要在浏览器的另一个实例中修改 Web Storage 才会触发,打开一个浏览器新标签页,输入相同的地址,在新标签页里修改 Web Storage

localStorage.setItem('username', 'Lee')

在原来的标签页控制台可以看到信息打印出来了

旧值: Jim
新值: Lee
键名: username

在浏览器开发者工具中可以直接查看和编辑 Local Storage 和 Session Storage

storage

这里有个库可以更方便地操作 Web Storage,Store.js,该库为那些不支持 Web Storage 的浏览器还提供了兼容方案

转载于:https://www.cnblogs.com/xyzhanjiang/p/11607731.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

客户端存储技术 的相关文章

随机推荐

  • IPv4、IPv6、UDP、TCP数据报首部格式分析

    一 IPv4首部格式 图片来源 图解TCP IP 通过wireshark抓QQ的数据报 IPV4的数据报格式和上面的一致 现在进行分析 相对重要的会红色标记 1 版本 version 由4比特构成 表示标识IP首部的版本号 如上是版本号为4
  • 面试专题:Linux运维精华面试题

    下面是一名资深Linux运维求职数十家公司总结的Linux运维面试精华 助力大家跳槽找个高薪好工作 1 什么是运维 什么是游戏运维 1 运维是指大型组织已经建立好的网络软硬件的维护 就是要保证业务的上线与运作的正常 在他运转的过程中 对他进
  • java双人对弈五子棋源码_java swing 双人五子棋源代码

    import java awt Color import java awt Font import java awt Graphics import java awt Toolkit import java awt event MouseE
  • C++ 类中的static成员的初始化和特点

    C 类中的static成员的初始化和特点 在C 的类中有些成员变量初始化和一般数据类型的成员变量有所不同 以下测试编译环境为 g v Using built in specs COLLECT GCC g Target x86 64 linu
  • 删除排序数组的重复项(给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间)

    给定一个排序数组 你需要在原地删除重复出现的元素 使得每个元素只出现一次 返回移除后数组的新长度 不要使用额外的数组空间 你必须在原地修改输入数组并在使用 O 1 额外空间的条件下完成 示例 1 给定数组 nums 1 1 2 函数应该返回
  • 第八章 聊聊区块链的几个数字

    第八章 聊聊区块链的几个数字 1 概述 2 2100W 3 每个区块10分钟 4 挖矿奖励4年递减1次 5 区块确认6次永久生效 6 51 算力攻击 6 1 币安黑客事件 参考资料 1 概述 在学习区块链过程中 会发现一些数字 心里不断问自
  • 使用MVC框架简单搭建一个数据库-后台-服务器Web项目

    在对Tomcat技术基本了解之后 用MVC框架简单搭建一个数据库 后台 服务器Web项目 MVC框架简介 MVC 是一种使用 MVC Model View Controller 模型 视图 控制器 设计创建 Web 应用程序的模式 Mode
  • 安全之公开密钥基本知识

    文件加密的基本知识 1 公开密钥密码 传统密码的缺点 1 收发双方持有相同密钥 密钥分配困难 KE KD K E K D 2 不能方便的实现数字签名 应用不方便 数字签名概念下面有 历史 公开密钥密码又称为双钥密码或非对称密码 是1976年
  • 企业网站建设方案书

    一 网站建设目标 1 1背景分析 现在网络的发展已呈现商业化 全民化 全球化的趋势 目前 几乎世界上所有的公司都在利用网络传递商业信息 进行商业活动 从宣传企业 发布广告 招聘雇员 传递商业文件乃至拓展市场 网上销售等 无所不能 如今网络已
  • iPhone Safari下iframe不显示滚动条无法滚动的解决方法

    div class dataTables wrapper style height 300px div
  • Go渗透测试笔记(二)---TCP,扫描器和代理

    Go渗透测试笔记 二 TCP 扫描器和代理 0x00 前言 TCP是面向连接协议的主要标准 也是现代网络的基础 作为攻击者 我们应当了解TCP的工作原理 并且能够开发可用的TCP结构体 以便可以识别 打开 关闭 的端口 找出错误的结果 如误
  • TCP/IP协议栈及网络基础,协议栈原理及实现

    1 TCP IP协议栈及网络基础 推荐这个在B站几千观看的视频讲解 底层原理到徒手实现 TCP IP网络协议栈 tcp协议栈 如何实现 C C Linux服务器开发高级架构学习视频点击 C C Linux服务器开发高级架构师 Linux后台
  • 正则表达式工具类

    在实际开发中总会使用到正则表达式匹配数据 我也是在后面查看了一些资料 下面写一个常用的正则表达式匹配集合 正则匹配模式 表示匹配字符串的开始位置 例外 用在中括号中 时 可以理解为取反 表示不匹配括号中字符串 表示匹配字符串的结束位置 表示
  • 量化交易动了谁的奶酪

    最近关于量化交易的政策讨论频出 在内容上 主要是限制其高频交易和某些可能对市场产生负面影响的行为 具体来说 中国证券监督管理委员会和上海证券交易所等机构都出台了相关政策 对量化交易的频率 规模 风险控制等方面进行了限制 这些政策的出台主要是
  • python--模块导入

    目录 模块简介 模块导入的两种方式 方式一 import 方式二 from import 模块简介 1 什么是模块 模块就是一系列功能的结合体 可以直接使用 2 为什么要用模块 极大地提升开发效率 拿来主义 gt gt gt 站在巨人的肩膀
  • docker部署redis集群实现动态扩缩容

    目录 思考 分布式存储的解决方案 哈希取余分区 一致性哈希算法分区 哈希槽分区 采用哈希槽分区 部署三主三从 docker 准备工作 创建3主3从redis实例 进入容器中 构建主从关系 主从容错切换迁移 主从扩容 主从缩容 思考 假如现有
  • canvas实战之酷炫背景动画(一)

    系列文章 canvas实战之酷炫背景动画 一 canvas实战之酷炫背景动画 二 canvas实战之酷炫背景动画 三 canvas实战之酷炫背景动画 四 canvas实战之酷炫背景动画 五 canvas实战之酷炫背景动画 六 canvas实
  • 09-java多线程

    多线程相关概念 并发和并行 并行 在同一时刻 有多个指令在多个CPU上同时执行 并发 在同一时刻 有多个指令在单个CPU上交替执行 进程和线程 进程 是正在运行的程序 独立性 进程是一个能独立运行的基本单位 同时也是系统分配资源和调度的独立
  • 分布式一致性协议Raft原理与实例

    thesecretlivesofdat 分布式一致性协议Raft原理与实例 标签 分布式算法 2015 09 30 20 43 3519人阅读 评论 15 收藏 举报 分类 Hadoop 7 版权声明 本文为博主原创文章 未经博主允许不得转
  • 客户端存储技术

    Cookie Cookie 是一种非常基础的客户端存储方式 得到广泛的支持 创建多个 cookie 的方法 document cookie name Jim document cookie age 18 当创建多个 cookie 时只能像这