Cookie, LocalStorage 与 SessionStorage

Cookie

Cookie 是服务器发送到用户浏览器并在本地保存的一些数据,通常来说,Cookie 被用于会话状态管理(如用户登录状态)、个性化设置与浏览器行为跟踪三个方面。单条 Cookie 的大小限制是 4KB,通常的浏览器中,每个域名的 Cookie 总个数限制为50条。

一些浏览器(比如Google Chrome)只支持对在线网站的 Cookie 进行读写操作,禁止对本地 HTML 的 Cookie 进行操作。

事实上,由于隐私问题、有限的存储空间、性能以及一些的其他原因,Cookie 正在逐渐被淘汰。取而代之的是在现代浏览器发展过程中出现的新的数据存储方式:Web Storage API 或 IndexedDB,它们允许直接将数据保存到浏览器本地。

Cookie 以键/值对的形式进行存储,当浏览器从服务器请求 Web 页面的时候,属于本页面的Cookie 会被添加到该请求中,并将用户的信息传递给服务端。

  • JavaScript 操作 Cookie

JavaScript 可以使用 document.cookie 属性来操作 Cookie。

创建 Cookie:

1
document.cookie = "userid=100000"

可以结合 Date() 对象为 Cookie 添加一个过期时间 expires,在默认的情况下,Cookie 会在浏览器关闭的时候删除:

1
document.cookie = "userid=100000;expires=Sun, 17 Apr 2077, 11:49:10 GMT"

可以使用 path 参数为 Cookie 添加一个路径,在默认的情况下,Cookie会属于当前页面:

1
document.cookie = "userid=100000;expires=

JavaScript 读取 Cookie 的方法比较简单,如下面的代码所示:

1
var x = document.cookie;

返回值是字符串类型的所有 Cookie,类型格式如下所示:

1
cookie1=value1;cookie2=value2;cookie3=value3;

修改 Cookie 与创建 Cookie 的方法相同,旧的 Cookie 会被直接覆盖。

若想删除 Cookie,则将 Cookie 的过期时间 expires 参数设置为之前的时间即可,如下所示:

1
document.cookie = "userid=; expires=Thu, 01 Jan 1970 00:00:00 GMT";

localStorage

HTML5 的 Web Storage API 提供了两种比 Cookie 更方便存储键/值对的机制,它们分别是localStorage与 sessionStorage。接下来将会对二者分别进行介绍。

localStorage 概念

localStorage用于长久保存一个网站里的数据,保存的数据不会过期,除非你手动去删除或者清空浏览器数据。

localStorage解决了Cookie存储空间不足的问题,从4KB的大小扩展到了5MB。

此外,localStorage还有一个特点,它只支持string类型的存储,因此使用JavaScript对 localStorage进行存取操作的时候还需要注意对数据的类型进行相应的转换。

localStorage 使用方式

浏览器提供了很方便的操作localStorage的方法,语法如下:

保存数据

1
localStorage.setItem("key", "value");

读取数据

1
var key = localStorage.getItem("key");

删除特定数据

1
localStorage.removeItem("key");

删除所有数据

1
localStorage.clear();

sessionStorage

sessionStorage 概念

sessionStorage是 Web Storage API 提供的第二种数据存储机制,经常用于临时保存某一窗口或标签页的数据。它与localStorage的唯一区别是localStorage属于永久性的存储,而sessionStorage会在会话结束的时候清空相应的键/值对。

sessionStorage 使用方式

浏览器也提供了很方便的操作 sessionStorage 的方法,与 localStorage 的操作方法类似,语法如下:

保存数据

1
sessionStorage.setItem("key", "value");

读取数据

1
var key = sessionStorage.getItem("key");

删除特定数据

1
sessionStorage.removeItem("key");

删除所有数据

1
sessionStorage.clear();

localStorage 与 sessionStorage 的区别与联系

区别

  • 生命周期不同:localStorage 存储的数据始终有效,一般用于数据持久化存储;sessionStorage在关闭页面或者浏览器后自动消失。
  • 作用域不同:localStorage 在所有同源窗口中共享;sessionStorage不在不同浏览器窗口间共享,即使是同一个页面。

联系

  • sessionStorage 与 localStorage 仅在本地保存,不会自动将数据发送给服务器,有效节省网络流量。
  • sessionStorage 与 localStorage 的存储大小一般皆为 5 MB。
  • sessionStorage 与 localStorage 都保存在浏览器端,且遵循同源策略。
  • sessionStorage 与 localStorage 的存储对象皆为字符串类型的键/值对。