Cookie基礎知識


cookie有9個屬性:

Name: cookie名
Value: cookie值
Domain: cookie的域。如果設成.test.com,那么子域名a.test.com和b.test.com,都可以使用.test.com的cookie
Path: cookie的路徑,一般設置成/即可
Expires: cookie過期時間。不設置,則為Session會話期,關閉頁面,cookie失效
HttpOnly: 設置為true,則js讀取不到cookie
Secure: 標記為Secure的cookie,只能通過https請求發送
SameSite: 限制第三方cookie。有3個值:Strict/Lax/None。chrome51新增,chrome80+強制執行

  Strict: 僅允許發送同站點請求的的cookie
  Lax: 允許部分第三方請求攜帶cookie,即導航到目標網址的get請求。包括超鏈接<a href='...' />,預加載<link rel="prerender" />和get表單<form method="GET" />三種形式發送cookie
  None: 任意發送cookie,設置為None,需要同時設置Secure,意味着網站必須采用https,若同時支持http和https,可以將http用307跳轉到https

Priority:優先級,chrome的提案,定義了三種優先級,Low/Medium/High,當cookie數量超出時,低優先級的cookie會被優先清除

cookie讀寫腳本

function getCookie(key){
    let cookies = document.cookie ? document.cookie.split('; ') : [];
    let i=0;
    let l=cookies.length;
    for(;i<l;i++){
        let entry = cookies[i].split('=');
        if(entry[0] == key){
            return entry[1];
        }
    }
    return null;
}

function setCookie(key,value,opts){
    if (typeof opts.expires === 'number') {
        var days = opts.expires, 
            t = opts.expires = new Date();
        t.setMilliseconds(t.getMilliseconds() + days * 864e5);
    }

    return (document.cookie = [
        encode(key), '=', String(value),
        opts.expires ? '; expires=' + opts.expires.toUTCString() : '',
        opts.path    ? '; path=' + opts.path : '',
        opts.domain  ? '; domain=' + opts.domain : '',
        opts.secure  ? '; secure' : ''
    ].join(''));
}

function removeCookie(key){
    setCookie(key,'',{expires:-1});
    return !getCookie(key);
}

function encode(key){
    return encodeURIComponent(key);
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM