之前有看過其他文章對Cookie的封裝,發現只要切換頁面,Cookie就會刪除不成功,後來發現是直接用過期時間覆蓋並不能覆蓋準確,造成這個的原因是Path不一致的問題。
首先說一下Cookie組成部分:Name(名稱)、Value(值)、Domain(域名)、Path(路徑)、Expires(過期時間)、Size(大小)、HttpOnly(JavaScript不能讀取該Cookie,提高安全性)、Secure(規定cookie只能在https協議下才能夠發送到服務器)、SameSite(防止 CSRF 攻擊和用戶追蹤)。
在存入Cookie的時候,如果不設置Domain和Path,則默認爲當前網站域名及根目錄,如果覆蓋的時候,不指定Path就不會覆蓋之前設置的Cookie
所以我根據原有的代碼進行改進,代碼如下:
/*存入cookie
*@name 字段名稱
*@value 字段值
*@day 天數
*/
setCookie(name, value, day) {
var strCookie = "";
if (name && value) {
strCookie = encodeURIComponent(name) + "=" + encodeURIComponent(value) + ";";
}
if (typeof (day) === "number") {
var date = new Date();
date.setTime(date.getTime() + 24 * 60 * 60 * 1000 * day);
//爲了覆蓋之前cookie的時候能夠準確覆蓋
strCookie += "expires=" + date.toUTCString() + "; path=/;"
}
return document.cookie = strCookie;
},
/*取出cookie
*@name 字段名稱
*/
getCookie(name) {
//var result={};
var cookieStr = decodeURIComponent(document.cookie);
var arr1 = cookieStr.split(";"); //[aa='xxx',bb="xxx"]
for (var i = 0; i < arr1.length; i++) {
var arr2 = arr1[i].split("=");
if (arr2[0].trim() === name) {
return arr2[1]
}
}
},
/*刪除cookie
*@name 字段名稱
*/
delCookie(name) {
this.setCookie(name, 1, -1)
}
以上,希望對大家有所幫助。
當一個人不能擁有的時候,他唯一能做的便是不要忘記。
——普魯斯特《追憶似水年華》