大前端开发

window.sessionStorage、window.loc

2019-06-25  本文已影响5人  ZhangYu31

前言:最近项目中用到了本地存储和cookie,虽然平时也经常提到,但是在用的时候还是有些模糊,这里做一下总结,以便加深记忆。

本地存储 Web Storage

Web Storage是为了在本地“存储”数据而生,均不会被发送到服务器端。包括了两种存储方式:sessionStorage和localStorage,这两个对象在支持的浏览器中都是以 window 对象属性的形式存在的。

相同点:

1、仅在客户端中保存,不参与和服务器的通信

2、都有同源策略限制,不同浏览器无法共享localStorage或sessionStorage中的信息

3、存储大小均为5M左右

不同点:

1、生命周期

localStoage:是一种永久性存储,除非手动清除。

sessionStorage:会话存储,存储在 sessionStorage 里面的数据在页面会话结束时会被清除,也就是一旦窗口或者标签页被关闭,那么所有通过 sessionStorage 存储的数据也会被删。页面会话在浏览器打开期间一直保持,并且重新加载或恢复页面仍会保持原来的页面会话。

2.作用域

localStorage: 在同一个浏览器内,同源文档(页面属于相同域名和端口)之间,即使是不同页面可以共享 localStorage 数据,可以互相读取、覆盖。

sessionStorage: 与 localStorage 一样需要同一浏览器同源文档这一条件。不仅如此,sessionStorage 的作用域还被限定在了窗口中,也就是说,只有同一浏览器、同一窗口的同源文档才能共享数据。

语法:

sessionStorage或localStorage两种存储方式几乎都有相同的方法和属性。

1.localStorage.length 和 sessionStorage.length : 返回本地存储列表长度;需要说明的是可以通过localStorage对象获取对应的存储数据,比如已经存储了一个键为name的数据,使用localStorage.name获取存储数据;下面的方法都是基于localStorage 对象 或 sessionStorage 对象;

2.getItem( keyName )方法:通过键获取存储的数据;

3.setItem( keyName,value )方法:存储数据,keyName为存储数据的键,value实际要存储的数据(可以把keyName理解成 给要存储的数据起的名字,便于管理);

4.removeItem( keyName )方法: 将指定键名的数据删除;

5.clear() 方法:清空所有的存储数据;

6.key() 方法: 获取键值,需要注意的是并不能返回指定布尔值需要作进一步处理

cookie

基本概念

1、cookie 确实非常小,它的大小限制为4KB左右。

2、要表示唯一的一个cookie值需要:name、domain、path

3、一般由服务器生成,可设置失效时间。如果在浏览器端生成Cookie,默认是关闭浏览器后失效。

4、每次都会携带在HTTP头中,如果使用cookie保存过多数据会带来性能问题。

cookie的使用

document.cookie,通过该方法可以读取、修改、删除cookie。

//读取cookie
var user = document.cookie; 
//修改cookie,旧的cookie将被覆盖
document.cookie="username=John Smith; expires=Thu, 18 Dec 2043 12:00:00 GMT; path=/";
//删除cookie,设置 expires 参数为以前的时间即可,不必指定 cookie 的值
document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 GMT";

三者异同

  1. cookie由服务端生成,用于标识用户身份;而两个storage用于浏览器端缓存数据

  2. 三者都是键值对的集合

  3. 一般情况下浏览器端不会修改cookie,但会频繁操作两个storage

  4. 如果保存了cookie的话,http请求中一定会带上;而两个storage可以由脚本选择性的提交

  5. 会话的storage会在会话结束后销毁;而local的那个会永久保存直到覆盖。cookie会在过期时间之后销毁。

  6. 安全性方面,cookie中最好不要放置任何明文的东西,两个storage的数据提交后在服务端一定要校验。

上一篇下一篇

猜你喜欢

热点阅读