Open CracKerMe opened 5 years ago
删除功能还是不够完美,又继续改进,增加对于 火狐 ie 的兼容
// COOKIE 的 通用方法
/*
* name: cookieName
* value: cookieValue
* days: 几天 大于0,建议为整数
* isZero: 是否是零点
*/
var SpCusCookie = {
setCookie: function (name, value, days, isZero) {
var date = new Date(),
expires = "",
days = Number(days);
if (days) {
if(isZero) {
var curTemp = date.getTime();
var curWeekHours = new Date(date.toLocaleDateString()).getTime() - 1;
var passedTimeStamp = curTemp - curWeekHours;
var leftTimeStamp = 24 * 60 * 60 * 1000 - passedTimeStamp;
var leftTime = new Date();
leftTime.setTime(leftTimeStamp + curTemp + (days-1) * 24 * 60 * 60 * 1000);
expires = "; expires="+leftTime.toGMTString();
} else {
date.setTime(date.getTime()+(days*24*60*60*1000));
expires = "; expires="+date.toGMTString();
}
}
document.cookie = name+"="+value+expires+"; path=/";
},
getCookie: function (name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
},
deleteCookie: function (name) {
var date = new Date();
date.setTime(date.getTime()-10000); //删除一个cookie,就是将其过期时间设定为一个过去的时间
document.cookie = name + "= ' ' " + "; expires=" + date.toUTCString()+";path="+"/";
document.cookie = name + "= ' ' " + "; expires=" + date.toUTCString()+";path="+"/";
}
}
const STORAGE_KEY = 'myAppName'; // 可选:定义一个命名空间,避免键名冲突
const storage = {
// 加密函数
encrypt(data, key) {
// 使用 AES 加密
const encrypted = CryptoJS.AES.encrypt(JSON.stringify(data), key).toString();
return encrypted;
},
// 解密函数
decrypt(data, key) {
try {
const decrypted = CryptoJS.AES.decrypt(data, key).toString(CryptoJS.enc.Utf8);
return JSON.parse(decrypted);
} catch (error) {
console.error(`解密数据出错:${error}`);
return null;
}
},
// 设置 localStorage 数据,并指定过期时间
setItem(key, value, expire = 1000 * 60 * 60) { // 默认有效期 1 小时
try {
const data = {
value: this.encrypt(value, 'your_secret_key'), // 使用你的密钥加密
expire: Date.now() + expire,
};
localStorage.setItem(`${STORAGE_KEY}-${key}`, JSON.stringify(data));
} catch (error) {
console.error(`设置 localStorage 数据出错:${error}`);
}
},
// 读取 localStorage 数据,并判断是否过期
getItem(key) {
try {
const data = JSON.parse(localStorage.getItem(`${STORAGE_KEY}-${key}`));
if (data && data.expire > Date.now()) {
return this.decrypt(data.value, 'your_secret_key'); // 使用你的密钥解密
} else {
this.removeItem(key); // 移除过期数据
return null;
}
} catch (error) {
console.error(`读取 localStorage 数据出错:${error}`);
return null;
}
},
// 移除 localStorage 数据
removeItem(key) {
try {
localStorage.removeItem(`${STORAGE_KEY}-${key}`);
} catch (error) {
console.error(`移除 localStorage 数据出错:${error}`);
}
},
// 清空所有 localStorage 数据
clear() {
try {
localStorage.clear();
} catch (error) {
console.error(`清空 localStorage 数据出错:${error}`);
}
},
};
// 使用示例
storage.setItem('user', { name: 'Alice', age: 20 }, 1000 * 60 * 60 * 24); // 有效期 24 小时
const user = storage.getItem('user');
console.log(user); // 输出:{ name: 'Alice', age: 20 }
这种方式 在已存在 cookie键值对的情况下,只是 新增 一组cookie。并没有实现 setCookie 的功能。
建议改进为