localStorage、sessionStorage 和 cookie 都是浏览器提供的用于在客户端存储数据的方式:
相同点:
- 都可以在客户端存储数据,使得数据能够在用户关闭浏览器后仍然存在。
- 都可以存储字符串类型的数据,也可以使用其他数据类型,但最终都被转换为字符串。
不同点:
- 存储数据的大小:localStorage 和 sessionStorage 不限制存储的数据量,而 cookie 的大小限制为4KB。
- 存储数据的生命周期:
- localStorage:没有过期时间,数据在页面卸载后依然存在。
- sessionStorage:与页面会话关联,当页面会话结束(用户关闭浏览器或标签页)时,数据被清除。
- cookie:可以设置过期时间,如果不设置过期时间,那么默认的生命周期与浏览器会话相关,即当浏览器关闭时,数据将被清除。
- 数据的可用性:
- localStorage?和?sessionStorage?仅在当前源(即当前域名和协议)的文档中可用。这意味着如果你在同源的不同标签页或窗口中打开新窗口,它们可以访问并共享 localStorage 或 sessionStorage。
- cookie?可以被发送到不同的源(即不同的域名和协议),但默认情况下,它们只能被设置它们的域访问。然而,可以通过设置 "domain" 和 "path" 属性来更改此行为。
- 数据的访问:localStorage 和 sessionStorage 不支持 "SameSite" 或 "SameBrowser" 选项,这意味着它们不能像 cookie 一样被限制在特定的源或跨源使用。
- 数据的操作:localStorage 和 sessionStorage 支持立即可读写的数据存储,而 cookie 需要使用特定的函数来读取和设置。
- 数据的兼容性:不是所有的浏览器都支持 localStorage 和 sessionStorage,但几乎所有的现代浏览器都支持 cookie。
npm i js-cookie -S
import Cookies from 'js-cookie'
Cookies.set('name', 'value');
Cookies.set('name', 'value', { expires: 7 });
Cookies.set('name', 'value', { expires: 7, path: '' });
Cookies.get('name'); // => 'value'
Cookies.get('nothing'); // => undefined
Cookies.get(); // => { name: 'value' }
Cookies.remove('name');
Cookies.set('name', 'value', { path: '' });
Cookies.remove('name'); // fail!
Cookies.remove('name', { path: '' }); // removed!
重要!删除cookie时,您必须传递用于设置cookie的完全相同的路径和域属性,除非您依赖于默认属性。
注意:删除未存在的cookie不会引发任何异常,也不会返回任何值
注:vue下使用localStorage和H5使用localStorage的方法是一致的,不需要引入插件
//数据
localStorage.setItem('userName','HelloWeen');
localStorage.getItem('userName')
localStorage.removeItem('userName');
var arr=[1,2,3];
localStorage.setItem("temp",arr); //会返回1,2,3
console.log(typeof localStorage.getItem("temp"));//string
console.log(localStorage.getItem("temp"));//1,2,3
var user= {"userName": "hello","age": 2};
typeof localStorage.getItem("user");//也会返回String
localStorage.setItem("user", user);//但是返回[object Object],
var user= {"userName": "hello","age": 2};
user= JSON.stringify(user); //转化为JSON字符串 ?"{"userName":"hello","age":2}"
localStorage.setItem("user", user);//返回{"userName":"hello","age":2}
user=JSON.parse(localStorage.getItem("user"));
//返回当前 sessionStorage 对象的第index序号的key名称。若没有返回null。
?sessionStorage.key(int index)
//返回键名(key)对应的值(value)。若没有返回null。
?sessionStorage.getItem(string key)
//该方法接受一个键名(key)和值(value)作为参数,将键值对添加到存储中;如果键名存在,则更新其对应的值。
sessionStorage.setItem(string key, string value)
//将指定的键名(key)从 sessionStorage 对象中移除。
?sessionStorage.removeItem(string key)
//清除 sessionStorage 对象所有的项。
?sessionStorage.clear()
sessionStorage.setItem('testKey','这是一个测试的value值'); // 存入一个值
sessionStorage['testKey'] = '这是一个测试的value值';
sessionStorage也可存储Json对象:存储时,通过JSON.stringify()将对象转换为文本格式;读取时,通过JSON.parse()将文本转换回对象。
?var userEntity = {
? ? name: 'tom',
? ? age: 22
};
// 存储值:将对象转换为Json字符串
sessionStorage.setItem('user', JSON.stringify(userEntity));
// 取值时:把获取到的Json字符串转换回对象
var userJsonStr = sessionStorage.getItem('user');
userEntity = JSON.parse(userJsonStr);
console.log(userEntity.name); // => tom
sessionStorage.getItem('testKey'); // => 返回testKey对应的值
sessionStorage['testKey']; // => 这是一个测试的value值