1. 程式人生 > 其它 >封裝一個對cookie操作的模組

封裝一個對cookie操作的模組

廢話不說直接上程式碼

cookie.js

點選檢視程式碼
const set = (name,value,{maxAge,domain,path,secure} = {}) => {
    let cookieStr = `${encodeURIComponent(name)} = ${encodeURIComponent(value)}`;
    
    if(typeof maxAge == 'number'){
        cookieStr += `; max-age = ${maxAge}`;
    }
    if(domain){
        cookieStr += `; domain = ${domain}`;
    }
    if(path){
        cookieStr += `; path = ${path}`;
    }
    if(typeof secure == 'boolean'){
        if(secure == true)
            cookieStr += '; secure';
    }

    console.log(cookieStr);
    document.cookie = cookieStr;
    return true;
}

const get = name => {
    name = encodeURIComponent(name);
    const cookieArray = document.cookie.split('; ');

    for (const item of cookieArray) {
        const [cookieName,cookieValue] = item.split('=');
        if(cookieName == name){
            return decodeURIComponent(cookieValue);
        }
    }
    return false;
}

const remove = (name,{domain,path} = {}) => {
    if(name == undefined||domain == undefined || path == undefined){
        // console.log(name);
        // console.log(domain);
        // console.log(path);

        return false;
    }
    name = encodeURIComponent(name);
    return set(name,'',{
        domain,
        path,
        maxAge:-1,
    });
}

export {set,get,remove}

html展示

點選檢視程式碼
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Cookie的封裝</title>
</head>
<body>
    <script type="module">
        import {set,get,remove} from './cookie.js'

        set('user','lsh');
        set('使用者','李世海');
        set('年齡','永遠的18歲!',{
            maxAge:999999999,
        });
        set('secure','value',{
            secure:true,
        })

        // 展示出來
        const userH2 = document.createElement('h2');
        const userChineseH2 = document.createElement('h2');
        const ageChineseH2 = document.createElement('h2');
        const secureH2 = document.createElement('h2');
        // 掛載節點
        const boday = document.getElementsByTagName('body')[0];

        remove('user',{
            domain:'127.0.0.1',
            path:'/',
            
        })
        userH2.innerText = get('user');
        userChineseH2.innerText = get('使用者');
        ageChineseH2.innerText = get('年齡');
        secureH2.innerText = get('sevure');

        boday.appendChild(userH2);
        boday.appendChild(userChineseH2);
        boday.appendChild(ageChineseH2);
        boday.appendChild(secureH2);


    </script>
</body>
</html>

總結

原生方式

新增
document.cookie = 'name=lsh; max-age=9999; domain=.taobao.com; path=/posts; secure'
document.cookie = '名=值; 屬性名=屬性值; 屬性名=屬性值; 屬性名=屬性值; secure'
secure 只要寫上屬性名就生效
doamin 值中的.taobao.com和taobao.com作用不同,.taobao.com代表以taobao.com為根域名的二、三級域名都可以訪問,taobao.com僅僅代表自身
path 值中的/pages和/pages/作用相同,但不視為同一(名/值)對,可同時存在
max-age = -1或0,可removecookie中對應的那一項

cookie中name,domain,path三者相同視為替換

下面三張圖中都存在path為/pages或/pages/的值