本地存储、会话存储和Cookies的区别
HTTP协议是服务器和客户端之间进行顺畅通信的最重要的协议之一。HTTP协议的主要缺点在于它是一种无状态协议,这意味着它不会跟踪服务器和客户端的任何响应和请求的信息。为了解决这个问题,有三种方式可以跟踪有用的信息。在本文中,我们将看到本地存储、会话存储和Cookies之间的区别,以及为什么对于网页开发人员来说了解这些术语是很重要的。
本地存储: 这个只读接口属性提供了对文档的本地存储对象的访问,存储数据在浏览器会话之间进行保留。与sessionStorage类似,只是当页面会话结束时(即当页面关闭时),sessionStorage数据会被清除。当浏览器的最后一个“私人”标签关闭时(在私人浏览或隐身会话中加载的文档的localStorage数据),也会被清除。
DOMStrings是使用UTF-16编码数据的存储格式,每个字符使用两个字节。与对象一样,字符串是从整数键自动生成的。存储在localStorage中的数据是特定于文档中的协议的。如果站点是通过HTTP加载的(例如,http://example.com),localStorage会返回与通过HTTPS加载的站点(例如,https://abc.com)不同的对象。
如果从文件URL加载文档(即直接从用户本地文件系统加载而不是从服务器加载),行为要求是未定义的,并且可能因不同的浏览器而有所不同。每个文件似乎在所有当前浏览器中由localStorage返回不同的对象:URL。本质上,似乎每个URL:文件都有其自己独特的本地存储区域。
由于如上所述,无法保证这种行为,因为file:URL要求仍然不清楚。因此,浏览器在任何时间都有可能更改它们处理文件的方式。一些浏览器处理该问题的方式已经发生了变化。
本地存储有四种方法:
- setItem()方法: 此方法接受两个参数,一个是键,另一个是值。它用于将值存储在特定的位置,并以键的名称标识。
localStorage.setItem(key, value)
- getItem() 方法 – 此方法接受一个参数,即用于获取特定键名称存储的值的键。
localStorage.getItem(key)
- removeItem()方法 – 此方法用于根据键删除存储在内存中的值。
localStorage.removeItem(key)
- clear() 方法 – 该方法用于清除存储在 localstorage 中的所有值。
localStorage.clear()
什么是Session Storage?
Session Storage对象可以通过sessionStorage只读属性访问。sessionStorage和localStorage的区别在于localStorage数据不会过期,而sessionStorage数据在页面会话结束时被清除。
一旦在浏览器选项卡中加载了文档,就会创建一个唯一的页面会话。页面会话仅对一个选项卡有效。页面仅在选项卡或浏览器打开的时间内保存;在页面重新加载和恢复后,它们不会持续存在。每次打开一个选项卡或窗口都会创建一个新的会话;这与会话cookie不同。使用相同URL打开的每个选项卡/窗口都会创建自己的sessionStorage。当您复制一个选项卡时,会将原始选项卡的sessionStorage复制到复制的选项卡中。关闭窗口/选项卡会结束会话并清除sessionStorage对象。
页面的协议决定了存储在sessionStorage中的数据。特别是通过HTTP访问的脚本存储的数据(例如http://abc.com)与通过HTTPS访问的同一网站(例如https://abc.com)存储在不同的对象中。UTF-16 DOMString格式中的每个字符的DOMString数字是两个字节。字符串会根据整数键自动生成,就像对象一样。
Session Storage有4个方法:
- setItem()方法 – 这个方法接受两个参数,一个是键(key),另一个是值(value)。它用于在特定位置存储带有键名的值。
sessionStorage.setItem(key, value)
- getIteam() 方法 – 这个方法接受一个参数,即用于获取与特定键名存储的值的键。
sessionStorage.getItem(key)
- removeItem() 方法 – 这个方法用于根据键名从内存中移除存储的值。
sessionStorage.removeItem(key)
- clear() 方法 – 该方法用于清除会话存储中存储的所有值
sessionStorage.clear()
Cookie: 术语“cookie”仅指有关网站的文本信息。为了识别您并根据您的偏好显示结果,当您访问特定网站时,此网站会将一些信息保存在您的本地系统中。互联网的历史长期以来一直以cookie的使用为标志。当访问网站时,网站访问者向服务器请求网页。每个对服务器的请求都是独一无二的。同样,如果您访问了100次,每个请求对服务器来说都是独一无二的。由于服务器每秒收到许多请求,将每个用户的信息存储在服务器上似乎是不合逻辑和显而易见的。如果您不返回,可能不需要再次使用相同的信息。因此,会发送一个cookie并将其存储在您的本地计算机上以唯一标识您。由于服务器可以识别您,下次您访问时将从同一台服务器收到响应。几乎每个服务器都使用此cookie(由于广告的存在,现在有些例外)。因此,尽管您的系统中可能有很多cookie,但服务器会识别并分析此类cookie。
当cookie首次开发时,它们用于改善开发人员的体验。假设您访问使用非母语(比如英语)的网站。您可以从网站的语言部分选择英语作为您的语言。如果您五次访问同一网站,可能需要每天切换语言五次。因此,这些细节会存储在您的系统中的cookie中。这确保服务器知道您下次发送请求时希望以英语查看网站。cookie在这方面非常重要。如今使用的cookie规模比以上示例小得多。

本地存储、会话存储和Cookie之间的区别 , 概述
| 本地存储 | 会话存储 | Cookies |
|---|---|---|
| 本地存储的容量为5MB/10MB | 会话存储的容量为5MB | Cookies的容量为4KB |
| 由于它不是基于会话的,必须通过JavaScript或手动方式删除 | 它是基于会话的,每个窗口或选项卡都能运行。这意味着数据仅在会话期间存储,即浏览器(或选项卡)关闭之前 | Cookies的到期时间根据设置并且基于选项卡和窗口运行 |
| 客户端只能读取本地存储 | 客户端只能读取本地存储 | 客户端和服务器都可以读取和写入Cookies |
| 没有将数据传输到服务器 | 没有将数据传输到服务器 | 数据传输到服务器是存在的 |
| 支持它的老旧浏览器较少 | 支持它的老旧浏览器较少 | 所有浏览器,包括旧版浏览器都支持它 |
极客教程