Web存储之LocalStorage初探
Web存储之LocalStorage初探
HTML5的发布和定稿为前端界带来巨大的变化,新增的API和特性给业务带来了更多可能性,让用户体验拥有了更可能的丰富。
· HTML Geolocation 可以定位到用户的地理位置
· HTML Drag and Drop 拖拽API,可以实现更简单有效的交互方式
· HTML Local Storage 本地存储方案, 配合离线缓存可以实现WebApp的本地化
· HTML Application Cache 离线缓存,可以将WebApp离线到本地使用
· HTML Web Workers JS版多线程,适合一些计算密集型的业务
· HTML SSE Server-sent Event 服务器推送技术,可以把主动权交给服务器端,往客户端主动推送数据、消息
· HTML Canvas/WebGL HTML图像处理API,能够实现更绚烂和丰富的效果
· HTML Audio/Video HTML音视频API,能够更方便处理音视频
今天,我就来简单介绍一下LocalStorage 这个本地存储。
首先来看一下 关于 Storage 的API。
Storage.length 只读
返回一个整数,表示存储在 Storage 对象中的数据项数量。Storage.key()
该方法接受一个数值 n 作为参数,并返回存储中的第 n 个键名。Storage.getItem()
该方法接受一个键名作为参数,返回键名对应的值。Storage.setItem()
该方法接受一个键名和值作为参数,将会把键值对添加到存储中,如果键名存在,则更新其对应的值。Storage.removeItem()
该方法接受一个键名作为参数,并把该键名从存储中删除。Storage.clear()
调用该方法会清空存储中的所有键名。
LocalStorage 和 SessionStorage 共同实现了这些API,可以看到API非常简单,只有5个API函数和一个只读的length属性,我们先看一下LocalStorage 的 DEMO,里面示范了除了key() 函数之外的API。
可以看到,storage 的API用例还是很简单的。
还有一个storage 的 Event事件,在LocalStorage 和 sessionStorage 变更的时候会触发一个Storage 的事件,但是只能在同源策略下触发,并且在当前窗口是不能触发的。也就是说在同一个浏览器中,A标签页变更Storage,B标签页会触发这个事件,在A里面是不行的,同时不在同一个浏览器里面也是无法触发的。
Storage事件的属性如下:
target Read only EventTarget The event target (the topmost target in the DOM tree).
type Read only DOMString The type of event.
bubbles Read only boolean Does the event normally bubble?
cancelable Read only boolean Is it possible to cancel the event?
key Read only DOMString (string) The key being changed.
oldValue Read only DOMString (string) The old value of the key being changed.
newValue Read only DOMString (string) The new value of the key being changed.
url Read only DOMString (string) The address of the document whose key changed.
storageArea Read only Storage The Storage object that was affected.
无论是LocalStorage 、sessionStorage 还是cookie 都有各自的优劣,下表我们来列举一下他们的对比情况。
| 特性 | Cookie | localStorage | sessionStorage |
|---|---|---|---|
| 数据的生命期 | 一般由服务器生成,可设置失效时间。如果在浏览器端生成Cookie,默认是关闭浏览器后失效 | 除非被清除,否则永久保存 | 仅在当前会话下有效,关闭页面或浏览器后被清除 |
| 存放数据大小 | 4K左右 | 一般为5MB | |
| 与服务器端通信 | 每次都会携带在HTTP头中,如果使用cookie保存过多数据会带来性能问题 | 仅在客户端(即浏览器)中保存,不参与和服务器的通信 | |
| 易用性 | 需要程序员自己封装,源生的Cookie接口不友好 | 源生接口可以接受,亦可再次封装来对Object和Array有更好的支持 | |
当然还有以下情况:
cookie由服务端生成,用于标识用户身份;而两个storage用于浏览器端缓存数据
三者都是键值对的集
cookie的话,会随http请求一起发送到服务器;而两个storage可以由脚本选择性的提交
会话的storage会在会话结束后销毁;而localStorage会一直存在直到手动销毁。cookie会在过期时间之后销毁。
安全性方面,cookie中一般不建议存储敏感信息。两个storage的数据提交后在服务端一定要校验(其实任何payload和qs里的参数都要校验)。
目前,对于LocalStorage的介绍大概就到此为止了,可能有某些错误的地方,也可能有些不准确的地方,欢迎各位指出斧正。
本文转载于:猿2048https://www.mk2048.com/blog/blog.php?id=h2ijjbc1jab
Web存储之LocalStorage初探的更多相关文章
- HTML5 web存储之LocalStorage和sessionStorage
什么是localstorage 前几天在老项目中发现有对cookie的操作觉得很奇怪,咨询下来是要缓存一些信息,以避免在URL上面传递参数,但没有考虑过cookie会带来什么问题: ① cookie大 ...
- 使用HTML5 Web存储的localStorage和sessionStorage方式
localStorage(本地存储),可以长期存储数据,没有时间限制,一天,一年,两年甚至更长,数据都可以使用.sessionStorage(会话存储),只有在浏览器被关闭之前使用,创建另一个页面时同 ...
- HTML 5 Web 存储:localStorage和sessionStorage
本文内容摘自http://www.w3school.com.cn/ 在客户端存储数据 HTML5 提供了两种在客户端存储数据的新方法: localStorage - 没有时间限制的数据存储 sessi ...
- Web 存储之localStorage
1.localStorage的浏览器支持情况 localStorage属于永久性存储,不移除永久存在:sessionStorage属于会话结束就消失. localStorage存储的大小在5M左右,不 ...
- 客户端本地存储,web存储,localStorage
HTML5 LocalStorage 本地存储 说到本地存储,这玩意真是历尽千辛万苦才走到HTML5这一步,之前的历史大概如下图所示: 最早的Cookies自然是大家都知道,问题主要就是太小,大概也就 ...
- 临时存存储页面上的数据---Web存储
HTML5 Web存储的两种方法使用 localStorage和sessionStorage 参考: http://www.cnblogs.com/taoweiji/archive/2012/12/0 ...
- HTML5: HTML5 Web 存储
ylbtech-HTML5: HTML5 Web 存储 1.返回顶部 1. HTML5 Web 存储 HTML5 web 存储,一个比cookie更好的本地存储方式. 什么是 HTML5 Web 存储 ...
- web 本地存储 (localStorage、sessionStorage)
web 本地存储 (localStorage.sessionStorage,cookie) localStorage(长期储存):即使关闭浏览器数据也不会删除,除非使用localStorage.cle ...
- [web 前端] web本地存储(localStorage、sessionStorage)
cp from : https://blog.csdn.net/mjzhang1993/article/details/70820868 web 本地存储 (localStorage.sessionS ...
随机推荐
- WPS二级标题链接到一级标题
WPS二级标题链接到一级标题,即2后出现2.1 2.2而不是1.3 1.4什么的 样式中的编号什么的都不用动,默认即可,关键在于这些多级标题是否选择了同一个编号方式 WPS中,只需要将它们的编号选择为 ...
- HTTP请求过程和状态响应码
HTTP请求过程 我们在浏览器中输入一个URL,回车之后便可以在浏览器中观察到页面内容.实际上,这个过程是浏览器向网站所在的服务器发送了一个请求,网站服务器接收到这个请求后进行处理和解析,然后返回对应 ...
- python flask 入门
1.入门案例.本质上还是一个socket from flask import Flask,request #### app=Flask(__name__) app.debug=True ####配置路 ...
- 通过IP访问公司公共资源库(共享文件)
今天,公司发通知说公司内部共享资源库已搭建完成,给了一个IP地址说可以访问了,那么如何去查看其他电脑的共享文件,下面以Windows7为例进行说明: 1:点击开始-运行(如图),或者快捷键(Win+R ...
- Jquery.Validate清除验证信息|laydate时间控件无法清除validate提示问题
最近做一个需求,用到模态框和Jquery.Validate验证框架: 点击添加时弹出模态框,当输入数据保存时如果数据不能通过校验,则会触发Validate验证并显示提示信息: 如果此时关闭弹出层,下次 ...
- Chapter08 面向对象(中级)
Chapter08 面向对象(中级) 8.1 IDEA的使用 1. 快捷键 删除当前行, 默认是 ctrl + Y 自己配置 ctrl + d 复制当前行, 自己配置 ctrl + alt + 向下光 ...
- Java变量,作用域,常量
JAVA变量,作用域,常量 变量 变量是什么:就是可以变化的量! Java是一种强类型的语言,每变量都必须声明其类型. Java变量是程序中最基本的存储单元,其要素包括:变量名,变量类型和作用域 格式 ...
- DDos攻击竟然这么恐怖,它的原理是什么?
DDOS的定义 分布式拒绝服务(DDoS:Distributed Denial of Service)攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击, ...
- ffmpeg修改视频文件的分辨率
在本文中,我们将展示如何调整任何视频文件的大小. 这种方法是在Linux系统(几乎任何发行版)中调整视频文件大小的最佳方法之一,也是Windows和Mac用户的绝佳替代方案. 更改视频文件的分辨率将是 ...
- 前端经典面试题vue面试题
1.什么是MVVM? MVVM是一种设计思想. Model 层代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑: View 代表UI 组件,它负责将数据模型转化成UI 展现出来,View ...