📅  最后修改于: 2023-12-03 15:09:07.679000             🧑  作者: Mango
有时候我们需要在浏览器的 cookie 中存储一些内容,而这些内容可能是一个对象。Javascript 提供了一种方法可以将整个对象存储在 cookie 中,下面介绍一下具体实现的方法。
首先我们需要将要存储的对象转换为字符串。常用的方法有两种:
JSON.stringify()
:将对象转换为 JSON 格式的字符串。Object.prototype.toString.call()
:将对象转换为字符串类型。以下是两种方法的例子:
const obj = {name: 'Tom', age: 18};
// 方法一:使用 JSON.stringify() 转换为 JSON 字符串
const strObj1 = JSON.stringify(obj);
console.log(strObj1); // {"name":"Tom","age":18}
// 方法二:使用 Object.prototype.toString.call() 转换为字符串
const strObj2 = Object.prototype.toString.call(obj);
console.log(strObj2); // [object Object]
接着我们需要将转换后的字符串存储到浏览器的 cookie 中。我们可以使用 Javascript 中的 document.cookie
来进行操作,以下是代码示例:
// 存储 cookie
function setCookie(name, value, expires, path, domain, secure) {
let cookieText = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;
if (expires instanceof Date) {
cookieText += `; expires=${expires.toGMTString()}`;
}
if (path) {
cookieText += `; path=${path}`;
}
if (domain) {
cookieText += `; domain=${domain}`;
}
if (secure) {
cookieText += '; secure';
}
document.cookie = cookieText;
}
// 从 cookie 获取值
function getCookie(name) {
let cookieName = `${encodeURIComponent(name)}=`,
cookieStart = document.cookie.indexOf(cookieName),
cookieValue = null;
if (cookieStart > -1) {
let cookieEnd = document.cookie.indexOf(';', cookieStart);
if (cookieEnd == -1) {
cookieEnd = document.cookie.length;
}
cookieValue = decodeURIComponent(document.cookie.substring(cookieStart + cookieName.length, cookieEnd));
}
return cookieValue;
}
// 实现将对象存储在 cookie 中的方法
function setObjectInCookie(name, obj, expires, path, domain, secure) {
const strObj = JSON.stringify(obj);
setCookie(name, strObj, expires, path, domain, secure);
}
// 实现获取存储在 cookie 中的对象的方法
function getObjectFromCookie(name) {
const strObj = getCookie(name);
return JSON.parse(strObj);
}
以上代码中,我们分别实现了 setObjectInCookie()
和 getObjectFromCookie()
两个方法,分别用于将对象存储到 cookie 中和从 cookie 中获取存储的对象。在存储对象时,我们使用了 JSON.stringify()
方法将对象转换为 JSON 格式的字符串,然后存储到 cookie 中。在读取对象时,我们使用了 JSON.parse()
方法将 JSON 格式的字符串转换为对象。另外,我们也提供了两个辅助方法,用于存储和获取普通字符串类型的内容。
最后,我们来看一下如何使用这段代码来实现将对象存储在 cookie 中:
const obj = {name: 'Tom', age: 18};
setObjectInCookie('testCookie', obj, new Date(new Date().getTime() + 3600 * 24 * 30 * 1000));
const newObj = getObjectFromCookie('testCookie');
console.log(newObj); // {name: "Tom", age: 18}
以上代码的执行流程如下:
obj
。setObjectInCookie()
方法将 obj
存储在名为 testCookie
的 cookie 中,这里还指定了 cookie 的过期时间为一个月后。getObjectFromCookie()
方法从名为 testCookie
的 cookie 中获取存储的内容,并使用 console.log()
输出获取的对象。