javascript 原生操作子 cookie 的工具类

这是一个用于管理和操作JavaScript中子Cookie的工具类。它提供了获取、设置、删除单个或所有子Cookie的方法,并遵循特定的子Cookie格式。通过示例展示了如何使用该工具类进行子Cookie的读写和删除操作。
摘要由CSDN通过智能技术生成

class SubCookieUtil{
    static get(name,subName){
        let subCookies=SubCookieUtil.getAll(name);
        return subCookies ? subCookies[subName] : null;
    }

    static getAll(name){
        let cookieName=encodeURIComponent(name)+"=",
        cookieStart=document.cookie.indexOf(cookieName),
        cookieValue=null,
        cookieEnd,
        subCookies,
        parts,
        result={};

        if(cookieStart > -1){
            cookieEnd=document.cookie.indexOf(";",cookieStart);
            if(cookieEnd == -1){
                cookieEnd=document.cookie.length;
            }
            cookieValue=document.cookie.substring(cookieStart+cookieName.length,cookieEnd);
            if(cookieValue.length > 0){
                subCookies=cookieValue.split("&");
                for (let i = 0,len=subCookies.length; i<len; i++) {
                    parts=subCookies[i].split("=");
                    result[decodeURIComponent(parts[0])]=decodeURIComponent(parts[1]);
                }
                return result;
            }
        }
        return null;
    }
    //写入cookie
    static set(name,subName,value,expires,path,domain,secure){
        let subCookies=SubCookieUtil.getAll(name) || {};
        subCookies[subName]=value;
        SubCookieUtil.setAll(name,subCookies,expires,path,domain,secure);
    }
    static setAll(name,subcookies,expires,path,domain,secure){
        let cookieText=encodeURIComponent(name)+"=",
        subcookieParts=new Array(),
        subName;
        for (subName in subcookies) {
            if (subName.length > 0 && subcookies.hasOwnProperty(subName)) {
                subcookieParts.push(`${encodeURIComponent(subName)}=${encodeURIComponent(subcookies[subName])}`);                
            }
        }
        if(subcookieParts.length>0){
            cookieText+=subcookieParts.join("&")
            if(expires instanceof Date){
                cookieText+=`; expires=${expires.toGMTString()}`;
            }
            if(path){
                cookieText+=`; path=${path}`;
            }
            if(domain){
                cookieText+=`; domain=${domain}`;
            }
            if(secure){
                cookieText+=`; secure`;
            }
        }else{
            cookieText+=`; expires=${(new Date(0)).toGMTString()}`;
        }
        document.cookie=cookieText;
    }
    static unset(name,subName,path,domain,secure){
        let subcookies=SubCookieUtil.getAll(name);
        if(subcookies){
            delete subcookies[subName];//删除
            SubCookieUtil.setAll(name,subcookies,null,path,domain,secure);
        }
    }
    static unsetAll(name,path,domain,secure){
        SubCookieUtil.setAll(name,null,new Date(0),path,domain,secure)
    }
}

子 cookie 格式: 

name=name1=value1&name2=value2&name3=value3&name4=value4&name5=value5

使用方式:

假设存在如下的cookie:

document.cookie=data=name=Nicholas&book=Professional%20JavaScript

//取得所有cookie

let data=SubCookieUtil.getAll("data");

alert(data.name);

alert(data.book);

//获取单个 cookie

alert(SubCookieUtil.get("data","name"));

alert(SubCookieUtil.get("data","book"));

//设置两个子cookie

SubCookieUtil.set("data","name","Nicholas");

SubCookieUtil.set("data","book","Professional JavaScript");

//设置所有子 cookie 并传入过期时间

SubCookieUtil.set("data","name","Michael",new Date("February 1,2022"));

//只删除 “name” 子 cookie

SubCookieUtil.unset("data","name");

//删除整个 cookie

SubCookieUtil.unsetAll("data")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值