1. 程式人生 > >Cookie寫入之path的坑

Cookie寫入之path的坑

document date() 一個 dem 設置 return 通過 obj cap

問題

我在/page/index/index.html中向瀏覽器添加了一個useid的cookie(這裏沒有指定path), 然後試著從/page/demo/demo.html中取值,發現無法取到,
通過開發者工具查看發現userid的path是/page/index/, 所以無法在page/demo/下面取到, 解決辦法就是在添加cookie時指定path為/page/, 這時page目錄下的所有頁面都可以獲取到userid

另外, path只能設置為絕對路徑

js操作cookie

添加cookie

/**
 * 添加cookie
 * @param {String} objName
 * @param {String} objValue
 * @param {Number} objHours
 */
function addCookie(objName,objValue,objHours){
    var str = objName + "=" + escape(objValue);
    
    if(objHours > 0){ // 如果不設定過期時間, 瀏覽器關閉時cookie會自動消失
        var date = new Date()
        var ms = objHours * 3600 * 1000;
        
        date.setTime(date.getTime() + ms);
        str += "; expires=" + date.toGMTString() + "; path=/page/;"; // 指定了cookie的path
    }
    
    document.cookie = str;
}

獲取cookie

/**
 * 獲取指定名稱的cookie值
 * @param {Object} objName
 */
function getCookie(objName) {
    var arrStr = document.cookie.split("; ");
    
    for (var i = 0; i < arrStr.length; i ++) {
        var temp = arrStr[i].split("=");
        
        if(temp[0] == objName) return unescape(temp[1]);
    }
}

刪除cookie

/**
 * 刪除指定名稱的cookie值
 * @param {Object} objName
 */
function delCookie(objName) {
    var exp = new Date();
    exp.setTime(exp.getTime() - 1);
    var cval = getCookie(objName);
    if (cval != null) {
        document.cookie = objName + "=" + cval + "; expires=" + exp.toGMTString() + "; path=/page/;"; // 指定了cookie的path
    }
}

參考文檔

  • HTTP cookies https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Cookie
  • document.cookie https://developer.mozilla.org/zh-CN/docs/Web/API/Document/cookie
  • Set-Cookiehttps://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie

Cookie寫入之path的坑