Cookie封裝及Cookie刪除失敗問題處理

之前有看過其他文章對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)
  }

以上,希望對大家有所幫助。

 

 

 

 

當一個人不能擁有的時候,他唯一能做的便是不要忘記。

——普魯斯特《追憶似水年華》

發佈了13 篇原創文章 · 獲贊 27 · 訪問量 1151
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章