Browser Cookie
document.myCookie = "blog=learnersbucket";
document.myCookie = "name=prashant;max-age=2";
console.log(document.myCookie);
setTimeout(() => {
console.log(document.myCookie);
}, 1000);
setTimeout(() => {
console.log(document.myCookie);
}, 2000);
// blog=learnersbucket;name=prashant
// blog=learnersbucket;name=prashant
// blog=learnersbucket
function parseCookieString(str) {
const [nameValue, ...rest] = str.split(";");
const [key, value] = separateKeyValue(nameValue);
const options = {};
for (let option of rest) {
const [key, value] = separateKeyValue(option);
options[key] = value;
}
return { key, value, options };
}
function separateKeyValue(val) {
return val.split("=").map((item) => item.trim());
}
function useCustomCookie() {
const store = new Map();
Object.defineProperty(document, "myCookie", {
configurable: true,
set(val) {
const { key, value, options } = parseCookieString(val);
let expiry = Infinity;
if (options["max-age"]) {
expiry = Date.now() + options["max-age"] * 1000;
}
store.set(key, { value, expiry });
},
get() {
const cookies = [];
let time = Date.now();
for (let [key, { value, expiry }] of store) {
if (time >= expiry) {
delete store[key];
} else {
cookies.push(key + "=" + value);
}
}
return cookies.join(";");
},
});
}
useCustomCookie();