精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

使用原生cookieStore方法,讓Cookie操作更簡單

開發 前端
cookieStore?提供的方法比起直接操作document.cookie要簡便許多,不僅支持增刪改查,還支持通過change事件來監聽cookie的變化,但是在使用過程需要注意兼容性問題。

前言

對于前端來講,我們在操作cookie時往往都是基于document.cookie,但它有一個缺點就是操作復雜,它并沒有像localStorage那樣提供一些get或set等方法供我們使用。對與cookie的操作一切都是基于字符串來進行的。為了讓cookie的操作更簡便, Chrome87率先引入了cookieStore方法。

document.cookie

document.cookie可以獲取并設置當前文檔關聯的cookie

獲取cookie

const cookie = document.cookie

在上面的代碼中,cookie 被賦值為一個字符串,該字符串包含所有的 Cookie,每條 cookie 以"分號和空格 (; )"分隔 (即, key=value 鍵值對)。

圖片圖片

但這拿到的是一整個字符串,如果你想獲取cookie中的某一個字段,還需要自己處理

const converter = {
  read: function (value) {
    if (value[0] === '"') {
      value = value.slice(1, -1);
    }
    return value.replace(/(%[\dA-F]{2})+/gi, decodeURIComponent)
  },
  write: function (value) {
    return encodeURIComponent(value).replace(
      /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,
      decodeURIComponent
    )
  }
}
function getCookie (key) {
            
  const cookies = document.cookie ? document.cookie.split('; ') : [];
  const jar = {};
  for (let i = 0; i < cookies.length; i++) {
    const parts = cookies[i].split('=');
    const value = parts.slice(1).join('=');

    try {
      const foundKey = decodeURIComponent(parts[0]);
      jar[foundKey] = converter.read(value, foundKey);

      if (key === foundKey) {
        break
      }
    } catch (e) {}
  }
  return key ? jar[key] : jar
}
console.log(getCookie('name'))  // 前端南玖

比如上面這段代碼就是用來獲取單個cookie值的

設置cookie

document.cookie = `name=前端南玖;`

它的值是一個鍵值對形式的字符串。需要注意的是,用這個方法一次只能對一個 cookie 進行設置或更新。

比如:

document.cookie = `age=18; city=shanghai;`

這樣只有age能夠設置成功

  • 以下可選的 cookie 屬性值可以跟在鍵值對后,用來具體化對 cookie 的設定/更新,使用分號以作分隔:

這個值的格式參見Date.toUTCString() (en-US)

;path=path (例如 '/', '/mydir') 如果沒有定義,默認為當前文檔位置的路徑。

;domain=domain (例如 'example.com', 'subdomain.example.com') 如果沒有定義,默認為當前文檔位置的路徑的域名部分。與早期規范相反的是,在域名前面加 . 符將會被忽視,因為瀏覽器也許會拒絕設置這樣的 cookie。如果指定了一個域,那么子域也包含在內。

;max-age=max-age-in-seconds (例如一年為 606024*365)

;expires=date-in-GMTString-format

如果沒有定義,cookie 會在對話結束時過期

;secure (cookie 只通過 https 協議傳輸)

  • cookie 的值字符串可以用encodeURIComponent() (en-US)來保證它不包含任何逗號、分號或空格 (cookie 值中禁止使用這些值).
function assign (target) {
  for (var i = 1; i < arguments.length; i++) {
    var source = arguments[i];
    for (var key in source) {
      target[key] = source[key];
    }
  }
  return target
}
function setCookie (key, value, attributes) {
  if (typeof document === 'undefined') {
    return
  }

  attributes = assign({}, { path: '/' }, attributes);

  if (typeof attributes.expires === 'number') {
    attributes.expires = new Date(Date.now() + attributes.expires * 864e5);
  }
  if (attributes.expires) {
    attributes.expires = attributes.expires.toUTCString();
  }

  key = encodeURIComponent(key)
    .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)
    .replace(/[()]/g, escape);

  var stringifiedAttributes = '';
  for (var attributeName in attributes) {
    if (!attributes[attributeName]) {
      continue
    }

    stringifiedAttributes += '; ' + attributeName;

    if (attributes[attributeName] === true) {
      continue
    }
    stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];
  }

  return (document.cookie =
          key + '=' + converter.write(value, key) + stringifiedAttributes)
}

setCookie('course', 'fe', { expires: 365 })

這里是js-cookie庫對setCookie方法的封裝

刪除cookie

function removeCookie (key, attributes) {
  setCookie(
    key,
    '',
    assign({}, attributes, {
      expires: -1
    })
  );
}

removeCookie('course')

新方法cookieStore

以上就是通過document.cookie來操作cookie的方法,未封裝方法之前操作起來都非常的不方便。現在我們再來了解一下新方法cookieStore,它是一個類似localStorage的全局對象。

圖片圖片

它提供了一些方法可以讓我們更加方便的操作cookie

獲取單個cookie

cookieStore.get(name)

該方法可以獲取對應key的單個cookie,并且以promise形式返回對應的值

async function getCookie (key) {
  const name = await cookieStore.get(key)
  console.log('【name】', name)
}
getCookie('name')

圖片圖片

當獲取的cookie不存在時,則會返回null

獲取所有cookie

cookieStore.getAll()

該方法可以獲取所有匹配的cookie,并且以promise形式返回一個列表

async function getAllCookies () {
  const cookies = await cookieStore.getAll()
  console.log('【cookies】', cookies)
}
getAllCookies()

當cookie不存在時,則會返回一個空數組

設置cookie

cookieStore.set()

該方法可以設置cookie,并且會返回一個promise狀態,表示是否設置成功

function setCookie (key, value) {
  cookieStore.set(key, value).then(res => {
    console.log('設置成功')
  }).catch(err => {
    console.log('設置失敗')
  })
}
setCookie('site', 'https://bettersong.github.io/nanjiu/')

如果想要設置更多的屬性,比如:過期時間、路徑、域名等,可以傳入一個對象

function setCookie (key, value) {
  cookieStore.set({
    name: key,
    value: value,
    path: '/',
    expires: new Date(2024, 2, 1)
  }).then(res => {
    console.log('設置成功')
  }).catch(err => {
    console.log('設置失敗')

  })
}
setCookie('site', 'https://bettersong.github.io/nanjiu/')

刪除cookie

cookieStore.delete(name)

該方法可以用來刪除指定的cookie,同樣會返回一個promise狀態,來表示是否刪除成功

function removeCookie (key) {
  cookieStore.delete(key).then(res => {
    console.log('刪除成功')
  }).catch(err => {
    console.log('刪除失敗')
  })
}
removeCookie('site')

需要注意的是:即使刪除一個不存在的cookie也會返回刪除成功狀態

監聽cookie

cookieStore.addEventListener('change', (event) => {
  console.log(event)
});

可以通過change事件來監聽cookie的變化,無論是通過cookieStore操作的,還是通過document.cookie來操作的都能夠監聽到。

該方法的返回值有兩個字段比較重要,分別是:change盒delete,它們都是數組類型。用來存放改變和刪除的cookie信息

監聽修改

調用set方法時,會觸發change事件,修改或設置的cookie會存放在change數組中

cookieStore.addEventListener('change', (event) => {
  const type = event.changed.length ? 'change' : 'delete';
  const data = (event.changed.length ? event.changed : event.deleted).map((item) => item.name);

  console.log(`【${type}】, cookie:${JSON.stringify(data)}`);
});

function setCookie (key, value) {
  cookieStore.set(key, value).then(res => {
    console.log('設置成功')
  }).catch(err => {
    console.log('設置失敗')
  })
}
setCookie('site', 'https://bettersong.github.io/nanjiu/')

??需要注意的是:

  • 通過document.cookie設置或刪除cookie時,都是會觸發change事件,不會觸發delete事件
  • 即使兩次設置cookie的name和value都相同,也會觸發change事件

監聽刪除

調用delete方法時,會觸發change事件,刪除的cookie會存放在delete數組中

cookieStore.addEventListener('change', (event) => {
  const type = event.changed.length ? 'change' : 'delete';
  const data = (event.changed.length ? event.changed : event.deleted).map((item) => item.name);

  console.log(`【${type}】, cookie:${JSON.stringify(data)}`);
});

function removeCookie (key) {
  cookieStore.delete(key).then(res => {
    console.log('刪除成功')
  }).catch(err => {
    console.log('刪除失敗')
  })
}
removeCookie('site')

??需要注意的是:

  • 如果刪除一個不存在的cookie,則不會觸發change事件

兼容性

在使用該方法時需要注意瀏覽器的兼容性

總結

cookieStore提供的方法比起直接操作document.cookie要簡便許多,不僅支持增刪改查,還支持通過change事件來監聽cookie的變化,但是在使用過程需要注意兼容性問題。

責任編輯:武曉燕 來源: 前端南玖
相關推薦

2019-04-04 14:05:20

consolejs前端

2009-07-24 17:54:20

iBatis配置

2009-07-21 08:36:59

2012-06-20 13:36:42

Surface平板

2011-05-07 16:13:14

數碼復合機

2020-06-01 07:41:52

Gmail郵箱郵件安全電子郵件

2022-04-14 07:51:39

TektonTaskRun

2019-07-10 10:20:36

前端用戶體驗javascript

2021-07-24 13:16:31

Android 代碼操作系統

2020-06-16 13:22:22

AI創新深度學習

2015-05-20 12:50:42

C#開發抽象增刪改

2010-03-23 09:54:35

好壓壓縮

2022-06-05 23:28:50

TypeScripinfer類型

2020-05-07 10:18:06

JavaScript前端技術

2012-09-25 09:28:36

程序員代碼代碼整潔

2009-06-18 15:51:52

SSL VPN負載均衡Array

2024-04-26 07:54:07

ZustandReact狀態管理庫

2015-08-18 11:26:31

DockerExec應用容器

2019-07-05 10:45:04

思科魏松斌人工智能
點贊
收藏

51CTO技術棧公眾號

国产精品久久亚洲7777| 久久91导航| 超碰成人在线观看| 国产欧美久久久精品影院| 九九热精品视频在线播放| 国产精品免费观看久久| 羞羞在线观看视频| 在线日韩影院| 国产精品18久久久久久久网站| 国产婷婷97碰碰久久人人蜜臀| eeuss中文| 中文字幕第2页| 免费看日本一区二区| 亚洲福利视频一区二区| 亚洲一区二区三区sesese| 国产三级短视频| 亚洲一区二区三区四区| 亚洲日本一区二区三区| 成人精品在线视频| 貂蝉被到爽流白浆在线观看| 日本黄色一区| 日本一区二区动态图| 国产精品成人一区二区| 亚洲欧洲久久久| 欧美精品高清| 亚洲国产日韩综合久久精品| 亚洲精品久久久久久一区二区| 毛片在线免费播放| 成人aaaa| 欧美色图天堂网| 亚洲精品二区| 日色在线视频| 一区二区三区日本久久久| 精品国产91久久久| 欧美黄色直播| 中国黄色一级视频| 国产精品婷婷| 亚洲欧洲在线视频| 日韩久久一级片| 色婷婷在线播放| 成人av在线影院| 欧美在线视频免费观看| 亚洲天堂最新地址| 中国av一区| 日韩电影中文字幕在线| 男女爽爽爽视频| 国产原创精品视频| 成人sese在线| 亚洲自拍偷拍福利| 国产精品毛片久久久久久久av| 91精品啪在线观看国产18| 日韩午夜在线观看视频| 免费一级特黄毛片| 大地资源中文在线观看免费版 | 视频一区视频二区视频三区高| 性色av免费观看| 日韩欧美午夜| 亚洲激情在线视频| 蜜臀一区二区三区精品免费视频 | 国产日产欧美一区二区三区| 国产精品欧美久久久| 麻豆明星ai换脸视频| 欧美性生活一级片| 欧美日韩一区二区欧美激情| 无码无遮挡又大又爽又黄的视频| 91啦中文在线| 成人手机在线视频| 国产美女精品视频免费观看| 精品视频在线观看免费| 国内精品伊人久久久| 日韩一区二区视频| 亚洲911精品成人18网站| 免费观看一级欧美片| 国产婷婷一区二区| 日韩资源av在线| 999国产精品视频免费| 午夜在线a亚洲v天堂网2018| 久久天天躁狠狠躁老女人| 制服丝袜第二页| 国产精品日韩精品在线播放| 色综合网站在线| 国产a级黄色大片| 成人好色电影| 国产精品国产馆在线真实露脸| 国产精品一区二区a| 天天综合网天天综合| 国产一区二区三区精品欧美日韩一区二区三区 | 中文字幕 在线观看| 国产精品少妇自拍| 精品国产乱码久久久久久丨区2区| 精品久久久久久久久久久久久久久久| 亚洲精品在线观看91| 亚洲九九九在线观看| 少妇熟女视频一区二区三区| 你懂的在线观看一区二区| 亚洲欧美日韩久久久久久| 日韩在线视频免费看| 欧美特黄a级高清免费大片a级| 中日韩美女免费视频网址在线观看| 国产免费无码一区二区| 欧美男gay| 日韩中文字幕亚洲| 少妇愉情理伦三级| 欧美日韩一区二区国产| 日本视频久久久| 日本三级欧美三级| 影音先锋亚洲精品| 欧美区二区三区| www毛片com| 国产乱码精品一区二区三| 国产精品美女在线观看| www.成人免费视频| 国产成人免费视频网站| 欧美精彩一区二区三区| 午夜小视频福利在线观看| 色综合天天做天天爱| 丰满少妇中文字幕| 日本一区二区三区播放| 欧美精品在线观看播放| 男人午夜视频在线观看| 向日葵视频成人app网址| 欧美精品自拍偷拍| 色婷婷在线影院| 欧美调教在线| 久久久国产精品亚洲一区| 激情五月激情综合| 国产精品嫩草99av在线| 91嫩草在线| 亚洲欧美激情另类| 成+人+亚洲+综合天堂| 亚洲一区二区三区精品动漫| 美女羞羞视频在线观看| 亚洲激情自拍视频| www.成年人视频| jizzjizz中国精品麻豆| 亚洲天天做日日做天天谢日日欢| 欧美色图另类小说| 日韩久久一区二区三区| 亚洲成人网在线| 国产精品无码久久久久一区二区| 欧美私人啪啪vps| 91在线视频导航| 黄色av一区二区三区| 中文字幕一区二区视频| 无限资源日本好片| 日韩不卡在线视频| 日韩中文字幕免费看| 特级西西444www高清大视频| 国产一区二区三区四区在线观看| 日韩伦理一区二区三区av在线| 九色porny丨首页入口在线| 在线亚洲人成电影网站色www| 日韩不卡一二三| 视频精品一区| 久久视频在线免费观看| 88av在线视频| 国产精品亚洲一区二区三区在线| 亚洲综合视频一区| 日韩毛片免费视频一级特黄| 精品国产乱码91久久久久久网站| www.久久国产| 亚洲色图欧美| 91在线观看免费高清完整版在线观看| 国产网站在线免费观看| 欧美一区2区视频在线观看| 真人bbbbbbbbb毛片| aa国产精品| 91九色精品视频| 爆操欧美美女| 色视频一区二区| 人妻巨大乳一二三区| 欧美大片一区| 国产激情视频一区| 亚洲免费成人在线| 午夜一区二区三区在线观看| 免费一区二区三区在线观看| 99欧美视频| 日韩av电影院| 日本在线观看网站| 一本久久综合亚洲鲁鲁五月天| 国产福利短视频| 日韩综合一区二区| 精品国产一区二区三| 乡村艳史在线观看| 中文日韩电影网站| 99久久久国产精品无码免费| 午夜私人影院久久久久| 丰满少妇高潮一区二区| 激情综合网天天干| 亚欧洲精品在线视频免费观看| 亚洲国产伊人| 国内精品国产三级国产在线专| 国产乱淫a∨片免费视频| 亚洲午夜日本在线观看| 一本之道在线视频| 久久免费精品视频在这里| 日本成人免费在线| 欧美人xxx| 亚洲国产精品va在线观看黑人| 狠狠人妻久久久久久| **欧美大码日韩| 色婷婷成人在线| 狠狠爱综合网| av一区和二区| 成人黄色网址| 日韩高清免费在线| 国产三级漂亮女教师| 欧美日韩亚洲系列| 少妇按摩一区二区三区| 久久成人免费网| 亚洲综合欧美日韩| 网曝91综合精品门事件在线| 国产69精品久久久久99| 超碰在线影院| 亚洲成人久久网| 91久久久久久久久久久久| 天天色综合天天| 91嫩草|国产丨精品入口| 久久精品99国产精品日本| 亚洲一区高清| 同性恋视频一区| 999在线免费观看视频| 欧美与亚洲与日本直播| 国产69精品久久久久99| 中文字幕有码在线视频| 精品免费日韩av| 国产精品18p| 99r国产精品| 亚洲乱码国产一区三区| 成人精品中文字幕| 久久大片网站| 福利一区二区三区视频在线观看| www.欧美免费| 国产毛片av在线| 欧美剧情电影在线观看完整版免费励志电影| 日本美女视频网站| 狠久久av成人天堂| 一道本在线观看视频| japanese国产精品| 91成人伦理在线电影| 国产精品无码久久久久| 欧美日韩爱爱视频| 黄色小网站在线观看| 日韩在线视频网| 99久久精品国产色欲| 欧美日韩国产大片| 国产性一乱一性一伧一色| 亚洲天堂网中文字| 999精品在线视频| 国产91丝袜在线播放| 少妇性饥渴无码a区免费| 在线播放亚洲| 国产真人做爰毛片视频直播| 亚洲夜间福利| 波多野结衣乳巨码无在线| 日韩中文字幕高清在线观看| 日韩激情视频| 日韩理论电影| 好色先生视频污| 小说区图片区色综合区| 久久精品国产精品国产精品污 | 久久久久久精| 亚洲精品蜜桃乱晃| 亚洲国产精品综合| 99久久夜色精品国产亚洲1000部| 天天成人综合网| 综合色一区二区| 99在线免费视频观看| av成人激情| 九色porny91| 精品影视av免费| 免费黄色av网址| 91在线一区二区三区| 久久久久久久久久久久久久久| 欧美国产精品一区二区三区| 污污的视频在线免费观看| 亚洲黄色尤物视频| 在线观看黄网站| 亚洲欧洲av另类| 青娱乐在线视频免费观看| 亚洲国产成人在线| 久久国产精品国语对白| 亚洲永久精品国产| 精品少妇一区二区三区密爱| 亚洲欧美色一区| 精品在线播放视频| 一区二区三区在线播| 国产精品免费av一区二区| 一本色道久久综合亚洲aⅴ蜜桃 | 免费黄在线观看| 亚洲黄色片在线观看| 久久免费激情视频| 欧美精品第1页| 天天操天天插天天射| 色阁综合伊人av| 白白色在线观看| 欧美美女15p| 一区二区三区短视频| 国产这里只有精品| 成人午夜sm精品久久久久久久| 亚洲一区中文字幕| 日韩黄色网络| 伊人久久av导航| 久久激情电影| av高清在线免费观看| 看国产成人h片视频| 好男人香蕉影院| www.在线欧美| 粉嫩av懂色av蜜臀av分享| av成人老司机| 亚洲av无一区二区三区| 婷婷综合另类小说色区| 一起草av在线| 亚洲欧美日韩精品久久亚洲区| 亚洲图区一区| 国产精自产拍久久久久久| 老司机成人在线| 欧美日韩精品免费看| 黑人一区二区三区四区五区| 精品综合久久久久| 国产尤物一区二区| japanese中文字幕| 亚洲成人在线网站| 国产女人18毛片水18精| 在线日韩精品视频| 黄色网页在线播放| 国产91在线视频| 青青一区二区| 免费看日本毛片| 肉肉av福利一精品导航| 国产精品偷伦视频免费观看了| 亚洲国产精品黑人久久久| 欧美啪啪小视频| 欧美日韩精品欧美日韩精品一| 亚洲人成色777777精品音频| 国产一区二区三区在线看| 99青草视频在线播放视| 日本91av在线播放| 曰本一区二区三区视频| 国产日产欧美视频| 91麻豆swag| av在线免费播放网址| 欧美午夜精品免费| 性色av蜜臀av| 日韩hd视频在线观看| 麻豆蜜桃在线| 国产成人久久久| 国产成人一区| 日韩欧美在线免费观看视频| 久久免费美女视频| 一区视频免费观看| 欧美久久久久久蜜桃| 韩国av网站在线| 亚洲自拍小视频| 综合天堂av久久久久久久| 亚洲精品在线网址| 一区二区三区中文在线| 亚洲第一视频在线| 国外色69视频在线观看| 国内毛片久久| 成人手机视频在线| 国内成+人亚洲+欧美+综合在线| 欧洲性xxxx| 欧美蜜桃一区二区三区 | 性色av一区二区三区免费 | 国产精品hd| 日本不卡视频一区| 国产精品区一区二区三区| 一本到在线视频| 亚洲图片在线综合| 国产福利一区二区三区在线播放| 综合操久久久| 国产精品一区二区你懂的| 国产一级久久久| 日韩黄色av网站| 一区在线影院| 桥本有菜av在线| 粉嫩av亚洲一区二区图片| 国产成人一区二区三区影院在线| 精品亚洲男同gayvideo网站| 欧美最新精品| 91大学生片黄在线观看| 麻豆精品久久精品色综合| 91日韩中文字幕| 亚洲精品成人av| 外国电影一区二区| 欧美一区二区视频在线播放| 久88久久88久久久| 久久免费在线观看视频| 亚洲人成亚洲人成在线观看| 一区二区三区| 一级特黄录像免费播放全99| 国产成人精品三级麻豆| 好吊妞视频一区二区三区| 最近2019免费中文字幕视频三| 1204国产成人精品视频| 男女啪啪免费观看| 久久久亚洲高清| 日韩精品一区二区av| 尤物tv国产一区|