cookie、sessionStorage 和 localStorage
cookie
1.基本概念
Cookie是保存在计算机上的一种文件。当我们使用计算机浏览网页时,服务器会生成一个证书并将其返回给我们的计算机。这个证书就是cookie。一般来说,cookie是服务器写给客户端的文件,也可以称为浏览器缓存。
简单来说,它可以读取并保存你访问网站时产生的一些行为信息,这些信息通常是加密的,否则会侵犯用户的隐私。Cookie也可以帮助加快第二次访问。通常,当我们访问一些网页时,系统会提示我们是否要保存用户名和密码。下次登录时,我们可以自动登录,无需再次登录。
图片来源于百度
2.用法
//引入js-cookie.js
1.直接引用cdn:<script src="https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js"></script>
2.本地下载下来后:<script src="/plugins/js.cookie.js"></script>
3.模块化开发时: npm install js-cookie import Cookies from 'js-cookie'
//使用
// 写入cookie
Cookies.set('name', 'value');
// 读取cookie
Cookies.get('name'); //'value'
// 读取所有可见的cookie
Cookies.get();//{name: 'value'}
// 删除某项cookie值
Cookies.remove('name');
//cookie的set方法支持的属性有:
//expires->过期时间
//path->设置为指定页面创建cookie
//domain->设置对指定域名及指定域名的子域名可见
//secure->设置是否只支持https,默认是false
Cookies.set('key', 'value'); //创建简单的cookie
Cookies.set('key', 'value', { expires: 27 });//创建有效期为27天的cookie
Cookies.set('key', 'value', { expires: 17, path: '/userInfo' }); //为userInfo页创建有效期17天的cookie
//删除指定页面path的cookie
Cookies.remove('key', { path: '' });
//注:如果存的是对象,如:
const userInfo = {age : 111, score : 90};
Cookies.set('userInfo', userInfo);
//取出来的userInfo需要进行JSON的解析,解析为对象
const userInfo = JSON.parse( Cookies.get('userInfo') );
//也可以使用
Cookies.getJSON('userInfo');
3.生命周期与优缺点
//创建Cookie时指定的expires值,就是Cookie的生存周期,在这个周期内Cookie有效,超出周期Cookie就会被清除。
//注:Cookie的生存周期设置为 '0'或负值, 在关闭浏览器时,就会马上清除Cookie。
优点
-
Cookie易于使用和实现
实现cookie的使用要比任何其他Internet协议容易得多。
-
占用更少的内存
不需要任何服务器资源,并存储在用户的计算机上,因此不会给服务器带来额外的负担。
-
持久性
当在客户端的浏览器上设置Cookie时,它可以持续数天,数月甚至数年。这样可以轻松保存用户首选项和访问信息,并在用户每次返回站点时保持此信息可用。此外,由于Cookie存储在客户端的硬盘上,因此如果服务器崩溃,它们仍然可用。
缺点
-
不安全
cookie是以明文形式存储,可能会造成安全风险,因为任何人都可以打开并篡改cookie。
-
数量受到限制
浏览器能创建的 Cookie 数量最多为
300
个,并且每个不能超过4KB
,每个 Web 站点能设置的 Cookie 总数不能超过 20 个。 -
可以被禁用
用户可以选择从浏览器设置中禁用其计算机上的cookie。这意味着用户可以决定不在他的浏览器上使用cookie,这可能会使程序在浏览器的运行中产生一些问题。
SessionStorage和localStorage
1.基本概念
浏览器提供的本地存储机制
2.用法
//它们的 API 基本相同,包括:
// setItem(key, value): 存储数据
// getItem(key): 获取数据
// removeItem(key): 删除数据
// clear(): 清空所有存储的数据
// key(i): 获取第 i 个键名
// length: 获取存储的数据个数
// 存储数据
sessionStorage.setItem("key1", "value1");
localStorage.setItem("key2", "value2");
// 获取数据
const value1 = sessionStorage.getItem("key1");
const value2 = localStorage.getItem("key2");
// 删除数据
sessionStorage.removeItem("key1");
localStorage.removeItem("key2");
// 清空存储
sessionStorage.clear();
localStorage.clear();
3.生命周期与优缺点
- sessionStorage 只在当前浏览器标签页有效,关闭标签页即失效。localStorage 永久有效,除非主动删除。
localStorage 优点:
- 数据持久存储。除非主动删除,否则一直存在。
- 可以保存结构化数据,如对象、数组。
localStorage 缺点:
- 不能存储敏感数据,因为数据可以被恶意获取。
- 可能导致本地存储空间被占用过多。
sessionStorage 优点:
- 数据临时存储,会话结束自动删除,不会占用过多本地存储空间。
- 可以在同一个会话的不同页面中共享数据。
sessionStorage 缺点:
- 数据不持久,会话结束随之删除。
- 不能保存敏感数据,数据只在客户端,容易被获取。
三者异同
特性 | Cookie | localStorage | sessionStorage |
---|---|---|---|
数据的生命周期 | 一般由服务器生成,可设置失效时间。如果在浏览器端生成Cookie,默认是关闭浏览器后失效 | 除非被清除,否则永久保存 | 仅在当前会话下有效,关闭页面或浏览器后被清除 |
存放数据大小 | 4K左右 | 一般为5MB |
|
与服务器端通信 | 每次都会携带在HTTP头中,如果使用cookie保存过多数据会带来性能问题 | 仅在客户端(即浏览器)中保存,不参与和服务器的通信 | |
存储类型 | 只能存储字符串 | 可以存储字符串、布尔值、整数、浮点数、对象、数组等 | |
作用域 | 在同源的窗口/标签页之间共享 | ||
典型使用场景 | 保存用户登录状态、购物车信息等 | 长期保存键值对数据,比如用户偏好设置或浏览历史 | 保存一个会话的信息,在用户登出或浏览器关闭之前一直存在 |
- sessionStorage localStorage cookiesessionstorage localstorage cookie sessionstorage localstorage router cookie sessionstorage localstorage session cookie sessionstorage localstorage cookies vue sessionstorage localstorage cookies 前端sessionstorage localstorage cookies 前端sessionstorage localstorage cookie sessionstorage localstorage sessionstorage localstorage elementui router 前端sessionstorage缓存localstorage