• javascript 原生操作子 cookie 的工具类


    1. class SubCookieUtil{
    2. static get(name,subName){
    3. let subCookies=SubCookieUtil.getAll(name);
    4. return subCookies ? subCookies[subName] : null;
    5. }
    6. static getAll(name){
    7. let cookieName=encodeURIComponent(name)+"=",
    8. cookieStart=document.cookie.indexOf(cookieName),
    9. cookieValue=null,
    10. cookieEnd,
    11. subCookies,
    12. parts,
    13. result={};
    14. if(cookieStart > -1){
    15. cookieEnd=document.cookie.indexOf(";",cookieStart);
    16. if(cookieEnd == -1){
    17. cookieEnd=document.cookie.length;
    18. }
    19. cookieValue=document.cookie.substring(cookieStart+cookieName.length,cookieEnd);
    20. if(cookieValue.length > 0){
    21. subCookies=cookieValue.split("&");
    22. for (let i = 0,len=subCookies.length; i<len; i++) {
    23. parts=subCookies[i].split("=");
    24. result[decodeURIComponent(parts[0])]=decodeURIComponent(parts[1]);
    25. }
    26. return result;
    27. }
    28. }
    29. return null;
    30. }
    31. //写入cookie
    32. static set(name,subName,value,expires,path,domain,secure){
    33. let subCookies=SubCookieUtil.getAll(name) || {};
    34. subCookies[subName]=value;
    35. SubCookieUtil.setAll(name,subCookies,expires,path,domain,secure);
    36. }
    37. static setAll(name,subcookies,expires,path,domain,secure){
    38. let cookieText=encodeURIComponent(name)+"=",
    39. subcookieParts=new Array(),
    40. subName;
    41. for (subName in subcookies) {
    42. if (subName.length > 0 && subcookies.hasOwnProperty(subName)) {
    43. subcookieParts.push(`${encodeURIComponent(subName)}=${encodeURIComponent(subcookies[subName])}`);
    44. }
    45. }
    46. if(subcookieParts.length>0){
    47. cookieText+=subcookieParts.join("&")
    48. if(expires instanceof Date){
    49. cookieText+=`; expires=${expires.toGMTString()}`;
    50. }
    51. if(path){
    52. cookieText+=`; path=${path}`;
    53. }
    54. if(domain){
    55. cookieText+=`; domain=${domain}`;
    56. }
    57. if(secure){
    58. cookieText+=`; secure`;
    59. }
    60. }else{
    61. cookieText+=`; expires=${(new Date(0)).toGMTString()}`;
    62. }
    63. document.cookie=cookieText;
    64. }
    65. static unset(name,subName,path,domain,secure){
    66. let subcookies=SubCookieUtil.getAll(name);
    67. if(subcookies){
    68. delete subcookies[subName];//删除
    69. SubCookieUtil.setAll(name,subcookies,null,path,domain,secure);
    70. }
    71. }
    72. static unsetAll(name,path,domain,secure){
    73. SubCookieUtil.setAll(name,null,new Date(0),path,domain,secure)
    74. }
    75. }

    子 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")

  • 相关阅读:
    Java注解
    振弦采集仪安全监测路基边坡的解决方案
    系统可靠性分析与设计
    【ES6知识】Iterator迭代器与 class类
    LeetCode 0264. 丑数 II
    视频编解码 — DCT变换和量化
    Vue计算属性 computed
    C Primer Plus(6) 中文版 第6章 C控制语句:循环 6.11 数组简介
    程序员疯抢的 Java 面试宝典(PDF 版)限时开源,别把大厂想的那么难,关键是你准备得如何
    含外部储能的电力系统暂态稳定分布式控制
  • 原文地址:https://blog.csdn.net/taotaobaobei/article/details/125418986