在客户端存储数据可以使用的技术有如下四种:

  1. Cookie技术:浏览器兼容性好,但操作比较复杂,需要程序员自己封装,源生的Cookie接口不友好

  2. H5 WebStorage:不能超过8MB,操作简单;

  3. IndexedDB:可存大量数据,还不是标准技术;

  4. Flash存储:依赖于Flash播放器,Adobe已宣布将放弃Flash,可以不再考虑此技术。

这里主要讨论cookie和WebStorage:

共同之处:Cookie和WebStorage都是用来跟踪浏览器用户身份的会话方式。

名词解释:Session:会话,浏览器从打开某个网站的一个页面开始,中间可能打开很多页面,直到关闭浏览器,整个过程称为“浏览器与Web服务器的一次会话。

 Cookie 是小甜饼的意思。顾名思义,cookie 确实非常小,它的大小限制为4KB左右,它的主要用途有保存登录信息,比如你登录某个网站市场可以看到“记住密码”,这通常就是通过在 Cookie 中存入一段辨别用户身份的数据来实现的。

WebStorage技术中,浏览器为用户提供了两个对象:

(1)window.sessionStorage:类数组对象,会话级数据存储;

(2)window.localStorage:类数组对象,本地存储(跨会话级存储);

sessionStorage,是在浏览器进程所分得的内存中存储着一次Web会话可用的数据,可供此次会话中所有的页面共同使用;浏览器一旦关闭就消失了。作用:在同一个会话中的所有页面间共享数据。

localStorage是在浏览器所能管理的外存(硬盘)中存储着用户的浏览数据,可供此次会话以及后续的会话中的页面共同使用,即使浏览器关闭也不会消失,可以说在本地电脑永久存在,除非JavaScript脚步删除或者用户主动清空浏览器缓存。作用:在当前客户端所对应的所有会话中共享数据,如登录用户名。

sessionStorage有如下方法,localStorage同样也可使用这些方法:

sessionStorage[key] = value       //保存一个数据

sessionStorage.setItem(key, value) //保存一个数据

var v = sessionStorage[key]       //读取一个数据

var v = sessionStorage.getItem(key) //读取一个数据

sessionStorage.removeItem(key) //删除一个数据

sessionStorage.clear()    //清除所有数据

sessionStorage.length    //数据的数量

sessionStorage.key(i)    //获取第i个key

localStorage中若数据发生了修改,都会触发一次window.onstorage事件,可以监听此事件,实现监视localStorage数据改变的目的,用于在一个窗口中监视其它窗口中对localStorage数据的修改。但注意window.onstorage不能监视sessionStorage数据的修改!

应用场景

有了对上面这些差别的直观理解,我们就可以讨论三者的应用场景了。

因为考虑到每个 HTTP 请求都会带着 Cookie 的信息,所以 Cookie 当然是能精简就精简啦,比较常用的一个应用场景就是判断用户是否登录。针对登录过的用户,服务器端会在他登录时往 Cookie 中插入一段加密过的唯一辨识单一用户的辨识码,下次只要读取这个值就可以判断当前用户是否登录啦。曾经还使用 Cookie 来保存用户在电商网站的购物车信息,如今有了 localStorage,似乎在这个方面也可以给 Cookie 放个假了。

而另一方面 localStorage 接替了 Cookie 管理购物车的工作,同时也能胜任其他一些工作。比如HTML5游戏通常会产生一些本地数据,localStorage 也是非常适用的。如果遇到一些内容特别多的表单,为了优化用户体验,我们可能要把表单页面拆分成多个子页面,然后按步骤引导用户填写。这时候 sessionStorage 的作用就发挥出来了。

安全性的考虑

需要注意的是,不是什么数据都适合放在 Cookie、localStorage 和 sessionStorage 中的。使用它们的时候,需要时刻注意是否有代码存在 XSS 注入的风险。因为只要打开控制台,你就随意修改它们的值,也就是说如果你的网站中有 XSS 的风险,它们就能对你的 localStorage 肆意妄为。所以千万不要用它们存储你系统中的敏感数据。

参考资料:

<<JavaScript高级程序设计>>

详说 Cookie, LocalStorage 与 SessionStorage(https://segmentfault.com/a/1190000002723469)

最新文章

  1. Maven 从svn下载后,pom.xml报错解决方案
  2. Android异常:唤醒锁未授权。(Caused by: java.lang.SecurityException: Neither user 10044 nor current process has android.permission.WAKE_LOCK.)
  3. Use getopt() &amp; getopt_long() to Parse Arguments
  4. Java数据库连接池
  5. 计时函数 clock() in c and c++
  6. java多线程学习-同步(synchronized)
  7. 域名转化到IP地址的实现
  8. 百度PHP实习一面面试题-算法-二维有序矩阵的查找
  9. 【MySql】Linux下更改转移mysql数据库目录
  10. FreeMaker开发教程
  11. 网站静态化处理—web前端优化—上(11)
  12. linux的基本操作(文本编辑工具vim)
  13. docker命令相关
  14. 003-hive安装
  15. Step3 SQL Server 通过备份文件初始化复制
  16. ionic popup 做法及样式修改
  17. 迭代器模式 与 C# IEnumerator/IEnumerable
  18. 【PHP7.1】linux centos7 安装phpredis扩展
  19. [Gradle] 发布构件到本地仓库
  20. Python在七牛云平台的应用(一)

热门文章

  1. 总结几点sql语句优化
  2. [Windows Server 2012] 阿里云镜像购买和使用方法
  3. vb,wps,excel 分裂
  4. python文件的读写的模式
  5. windows sdk编程隐藏窗体标题栏
  6. 使用nsight调试caffe
  7. js 给url添加时间戳 解决浏览器缓存
  8. 01Hibernate
  9. 06CSS列表
  10. Elasticsearch入门和基本使用