js客户端存储之Web存储

WEB存储

客户端存储有几种方式,WEB存储就是其中一种。最初作为H5的一部分被定义成API形式,后来被剥离出来作为独立的标准。所描述的API包含localStorage对象和sessionStorage对象,这两个对象实际都代表同一个Storage对象,是持久化关联数组。是名值对的映射表。
localStorage和sessionStorage区别在于存储的有效期和作用域的不同:数据可以存储多长时间以及谁拥有数据的访问权。

浏览器兼容性

clipboard.png

clipboard.png


存储有效期

  • localStorage
    永久性。除非WEB应用刻意删除存储的数据,或者用户通过设置浏览器配置来删除,否则数据会一直保留在用户电脑上,永不过期。实际上,localStorage的数据是写入磁盘中,每次读取数据时,实际上是从硬盘驱动器上读取这些字节。

  • sessionStorage
    窗口或标签页被永久关闭,则通过sessionStorage存储的数据也被删除。


作用域

都是限定在文档源级别。(非同源文档间无法共享)

  • localStorage

    • 同源的文档间共享相同的localStorage数据。它们之间可以互相读取甚至覆盖对方数据。非同源的文档间互相都不能读取或覆盖对方的数据(即使运行的脚本是来自同一台第三方服务器也不行)。

    • 受浏览器供应商限制。不能访问上次存储在不同浏览器的数据。

  • sessionStorage

    • 限定在窗口中。如果同源的文档渲染在不同的浏览器标签页中,那么它们的数据也无法共享。【窗口指的是顶级窗口。若一个标签页中有两个<iframe>包含同源文档也可共享】

    • 一个标签页中的脚本是无法读取或覆盖由另一个标签页脚本写入的数据。
      【补充:文档流是通过协议、主机名以及端口来决定的。】

存储API

localStorage与sessionStorage均适用。

clipboard.png


localStorage.setItem("x",1);//以"x"的名字存储一个数值
localStorage.x = 1;//直接向 Web 存储对象添加键/值对localStorage.getItem("x");//获取数值
localStorage.x;//直接从 Web 存储对象中检索键/值对localStorage.removeItem("x");//删除“x”项。
//removeItem是唯一通用的能删除单个名值对的方式。(因为IE8不支持delete操作符)
localStorage.clear();//全部删除。唯一能删除存储对象中所有名值对的方式//将一个数组存储为字符串
var myArray = new Array('First Name', 'Last Name', 'Email Address');
localStorage.formData = JSON.stringify(myArray);//检索数组的字符串版本并将它转换成一个可用的 JavaScript 数组
var myArray = JSON.parse(localStorage.formData);

存储事件

无论什么时候存储在localStorage或sessionStorage的数据发送改变,浏览器都会在其它对该数据可见的窗口对象上触发存储事件。
【对于localStorage,如果浏览器两个标签页都打开了来自同源的页面,其中一个页面存储了数据,另外一个标签页就会接收到一个存储事件。】
【对于sessionStorage,只有当相互牵连的窗口的时候才会触发存储事件】
【只有当存储数据真正发生改变的时候才会触发存储事件】

与存储事件相关的事件对象属性

  • key 被设置或移除的项的名字或者键名。如果调用clear(),则该属性值为null

  • newValue 保存该项的新值。若调用removeItem(),该属性值为null

  • oldValue 改变或删除该项前,保存该项原先的值。插入一个新项时,该属性值为null

  • storageArea 好比是目标Window对象上的localStorage属性或sessionStorage属性

  • url 触发该存储变化脚本所在文档的URL

【localStorage和存储事件都是采用广播机制,浏览器会对目前正在访问同样站点的所有窗口发送消息。】

安全性

【翻译的比较烂。可以去看官方解释】

  • DNS spoofing attacks
    针对DNS欺骗攻击,页面可以使用TLS,来确保他们是来自同一个域从而允许访问。

  • Cross-directory attacks
    共享一个主机名的不同用户,都共享同一个local storage object。在共享主机时需要谨慎使用。因为其他共享用户可以读取并且覆盖数据。【PS:Even if a path-restriction feature was made available, the usual DOM scripting security model would make it trivial to bypass this protection and access the data from any path.】

  • Implementation risks
    主要风险在于恶意网站可以从其他域读取信息并且对其他域写入恶意数据。让第三方站点读取其他域的数据会造成信息泄露(information leakage)。让第三方站点写其他域存储的数据也会造成信息欺骗(information spoofing)

【Web 存储并不比 cookies 安全。所以不要在客户端存储敏感信息,比如密码或信用卡信息。】

localStorage优化

由于localStorage的数据是被写入磁盘中,每次读取数据是从硬盘驱动器中读取,速度会很慢。除此之外,从单一localStorage键值中读取的数据量对速度是没有影响, 而读取次数越多,速度越慢。
最佳策略:使用尽可能少的键值,存取尽可能多的数据。

参考内容:《js权威指南》
使用 HTML5 Web 存储实现离线工作
《Web性能实践日志》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/543293.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

直播软件自动化测试,基于SRS-Bench工具的直播平台性能测试

摘要&#xff1a;性能测试通过自动化的测试工具模拟正常、异常场景来对系统的各项性能指标进行测试。通过性能测试可以分析一个系统能力、瓶颈、关键问题等。本文结合直播平台的部分场景&#xff0c;使用开源SRS-Bench工具对直播并的4个场景进行压力测试&#xff0c;测试直播平…

pythontype函数使用_Python astype(np.float)函数使用方法解析

Python astype(np.float)函数使用方法解析 我的数据库如图结构我取了其中的name age nr&#xff0c;做成array&#xff0c;只要所取数据存在str型&#xff0c;那么取出的数据&#xff0c;全部转化为str型&#xff0c;也就是array阵列的元素全是str&#xff0c;不管数据库定义的…

计算机硬件加速怎么开,显卡硬件加速,小编教你电脑怎么开启显卡硬件加速

小编之前是不知道怎么开启显卡硬件加速的&#xff0c;后来是朋友教我&#xff0c;才知道原来开启显卡硬件加速并不难操作。所以今天小编也将者开启的方法分享给小伙伴们。让你们也知道怎么开启硬件加速。显卡硬件加速有什么作用呢&#xff1f;其实开启了显卡硬件加速&#xff0…

um是代表什么意思_女生约会心里都想什么?女生约会举动代表什么意思

在和女生约会的全过程中&#xff0c;女生的思绪通常都较为细致&#xff0c;1个目光、1个行为、1个中停……都将会蕴含了無限的含意&#xff0c;男生们假如愿意取得成功将女生追到手&#xff0c;很必须剖析一下下女生约会心里都想干什么&#xff0c;女生约会举动代表什么意思&am…

ubuntu mysql开发_ubuntu linux mysql 开发模式与连接编译

【源码 测试】#include #include #include int main(void){MYSQL_RES *result;MYSQL_ROW row;MYSQL *connection, mysql;int state;mysql_init(&mysql);connection mysql_real_connect(&mysql,"localhost","root","951241","mysql…

浅谈浏览器http的缓存机制

针对浏览器的http缓存的分析也算是老生常谈了&#xff0c;每隔一段时间就会冒出一篇不错的文章&#xff0c;其原理也是各大公司面试时几乎必考的问题。 之所以还写一篇这样的文章&#xff0c;是因为近期都在搞新技术&#xff0c;想“回归”下基础&#xff0c;也希望尽量总结的更…

计算机故障检修课过时,第三场公开课|电脑故障维修以及笔记本知识科普

原标题&#xff1a;第三场公开课|电脑故障维修以及笔记本知识科普等待了漫长的一个星期&#xff0c; R&D又带着满满的干货和大家见面啦~你没看错&#xff01;&#xff01;这次R&D带来了两份大大的干货给大家分别是大家关心的 电脑故障维修问题以及大家想要了解的 笔记本…

为什么说python是计算机语言的未来_Python这么火,为什么说它不是未来的编程语言?...

本文转载自公众号“读芯术”(ID&#xff1a;AI_Discovery) Python这两年非常火&#xff0c;随处可见的广告让它逐渐变成了一种老少皆知的存在。 虽然问世几十年后&#xff0c;Python才得到编程社区的重视。 但是&#xff0c;其发展的势头似乎无人能及。自2010年年初以来&#x…

win 杀掉占用的端口_Windows netstat 查看端口、进程占用、杀掉进程

转载&#xff1a;http://ywsm.iteye.com/blog/510670http://58582786.blog.51cto.com/1550000/671487目标&#xff1a;在Windows环境下&#xff0c;用netstat命令查看某个端口号是否占用&#xff0c;为哪个进程所占用.操作&#xff1a;操作分为两步&#xff1a;(1)查看该端口被…

C++课程上 有关“指针” 的小结

上完了C的第二节课以后&#xff0c;觉得应该对这个内容进行一个小结&#xff0c;巩固知识点&#xff0c;并对我的心情进行了一个侧面烘托... 开始上课的老师&#xff1a; 正在上课的我&#xff1a; 上去敲代码的我&#xff1a; 过程是这样的&#xff1a; 下来的我&#xff1a; …

python安装路径查看_查看python安装路径及pip安装的包列表及路径

一、Linux系统 查看Python路径 whereis python 此命令将会列出系统所安装的所有版本的Python的路径效果如下&#xff1a;使用以下命令可分别查看Python2&#xff0c;Python3的安装路径 whereis python2 whereis python3 查看使用pip安装的软件包 默认Python3 pip list Python2查…

python循环10次_开发一个循环 5 次计算的小游戏, 设置随机种子为10,每次随机产生两个 1~10的数字以及随机选择...

开发一个循环 5 次计算的小游戏&#xff0c;设置随机种子为10&#xff0c;每次随机产生两个 1~10的数字以及随机选择“、-、*”运算符&#xff0c;构成一个表达式&#xff0c;让用户计算式子结果并输入结果&#xff0c;如果计算结果正确则加一分&#xff0c;如果计算结果错误不…

配置java编译环境

2019独角兽企业重金招聘Python工程师标准>>> (1)我的电脑属性->高级系统配置->环境变量(2)点击第二个"新建(W)..."->输入变量名"JAVA_PATH",变量值"C:\Program Files\Java\jdk1.8.0_91"->确定(3)找系统变量中的Path并双击…

spring aop 必须的包 及里面用到的东西_Spring 原理初探——IoC、AOP

前言众所周知&#xff0c; 现在的 Spring 框架已经成为构建企业级 Java 应用事实上的标准了&#xff0c;众多的企业项目都构建在 Spring 项目及其子项目之上&#xff0c;特别是 Java Web 项目。Spring 的两个核心概念是 IoC(控制反转)和 AOP(面向切面编程)。想了解 Spring 的工…

Android平台和java平台 DES加密解密互通程序及其不能互通的原因

为什么80%的码农都做不了架构师&#xff1f;>>> 网上的demo一搜一大堆&#xff0c;但是&#xff0c;基本上都是一知半解&#xff08;包括我&#xff09;。为什么呢&#xff1f;我在尝试分别在两个平台加密的时候&#xff0c;竟然发现Android DES 加密和Java DES加密…

PDM系统服务器管理,基于PDM的异地协同设计系统

基于PDM的异地协同设计系统随着经济全球化的不断发展&#xff0c;产品设计分工越来越细&#xff0c;产品协同设计团队越来越分散。由于产品设计的需要&#xff0c;分布在不同地方的设计人员和其他相关人员都要参与产品的开发过程&#xff0c;各自承担相应的设计任务&#xff0c…

flex 下对齐_Flex 布局示例

感谢阮一峰老师的教程http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html本示例将教程上所有的布局都简单的实现了一遍&#xff0c;并保存GitHub上面https://github.com/JailBreakC/flex-box-demo​github.com容器的属性1、flex-direction属性flex-direction属性决定主…

python读csv最快方法_使用Python读写csv文件的三种方法

Python读写csv文件觉得有用的话,欢迎一起讨论相互学习~Follow Me前言逗号分隔值(Comma-Separated Values&#xff0c;CSV&#xff0c;有时也称为字符分隔值&#xff0c;因为分隔字符也可以不是逗号)&#xff0c;其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件…

url过滤怎么解除_Shiro-实战(四)---过滤器机制

1 简介Shiro使用了与Servlet一样的Filter接口进行扩展 1.1 NameableFilterNameableFilter给Filter起个名字&#xff0c;如果没有设置默认就是FilterName 当我们组装拦截器链时会根据这个名字找到相应的拦截器实例1.2 OncePerRequestFilter用于防止多次执行Filter,也就是说一次请…

django使用LDAP验证

1.安装Python-LDAP&#xff08;python_ldap-2.4.25-cp27-none-win_amd64.whl&#xff09;pip install python_ldap-2.4.25-cp27-none-win_amd64.whl 2.安装django-auth-ldap&#xff08;django-auth-ldap-1.2.8.tar.gz&#xff09;&#xff08;下载&#xff1a;https://pypi.py…