精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

成人av毛片在线观看| 欧美日韩国产高清视频| 婷婷久久综合网| 日韩三级精品| 精品福利在线观看| 视频在线99re| a毛片在线免费观看| 日韩视频中文| 中文字幕久热精品视频在线| 亚洲一二三不卡| 国产理论电影在线| 久久综合久久综合亚洲| 国产精品久久久久久久久久免费| 天天色影综合网| 国产精品国产| 欧美日本一区二区三区| 欧美激情亚洲天堂| 六十路在线观看| 国产老妇另类xxxxx| 欧美最猛性xxxxx(亚洲精品)| 天天操天天摸天天舔| 国产精品乱战久久久| 欧美亚洲一区二区在线| 精品一二三四五区| 91短视频版在线观看www免费| 国产不卡视频一区| 国产精品免费看久久久香蕉| 精品午夜福利视频| 青青草国产成人a∨下载安卓| 亚洲国产精品99久久| 99re6在线观看| videos性欧美另类高清| 亚洲免费在线视频| 欧洲亚洲一区二区| 免费a级片在线观看| 免费成人在线观看| 欧美在线观看网址综合| 久草资源在线视频| 日韩系列欧美系列| 亚洲人a成www在线影院| jjzz黄色片| 国产一区二区三区精品在线观看 | 免费成人在线观看av| 国产喷水福利在线视频| 日本欧美大码aⅴ在线播放| 欧美精品videosex极品1| 日本少妇aaa| 精品产国自在拍| 日韩乱码在线视频| 无码成人精品区在线观看| 蜜桃精品视频| 91精品国产综合久久香蕉的特点| 亚洲欧美国产日韩综合| 中文字幕乱码中文乱码51精品| 亚洲在线观看免费| 欧美人与动牲交xxxxbbbb| 黄网页在线观看| 亚洲欧洲日韩女同| 影音先锋欧美资源| 视频三区在线| 国产精品久久久久久久久久久免费看| 色之综合天天综合色天天棕色| 男人久久精品| 91蝌蚪porny成人天涯| 精品乱码一区二区三区| 无码国产精品一区二区免费16| 四虎影视精品| 欧美成人官网二区| 又黄又爽又色的视频| 久久伦理中文字幕| 欧美一级免费大片| 三上悠亚 电影| 欧美日本三级| 欧美成人福利视频| 97精品人妻一区二区三区蜜桃| 伊人久久噜噜噜躁狠狠躁| 欧美电视剧在线看免费| 污污污www精品国产网站| 牛牛视频精品一区二区不卡| 日韩精品免费看| 51妺嘿嘿午夜福利| 成人高清电影网站| 久久久成人av| 国产精品变态另类虐交| 国产精品普通话对白| 日本精品视频在线| 中文字幕日韩第一页| 狠狠v欧美v日韩v亚洲ⅴ| 超碰97人人在线| 日本中文字幕一区二区有码在线| 国产日产欧美一区| 伊人久久大香线蕉午夜av| 欧美xxxx做受欧美88bbw| 亚洲成人资源在线| 999精品视频在线| 国产精品天堂蜜av在线播放| 91精品国产91久久久久久一区二区 | 国产日韩欧美一区二区三区在线观看| 欧美亚洲视频在线看网址| 69亚洲精品久久久蜜桃小说| 久久成人18免费观看| 99久久国产免费免费| 天天射天天色天天干| 国产欧美日产一区| 欧美日韩dvd| 中文字幕乱码在线播放| 51精品国自产在线| 人妻熟女aⅴ一区二区三区汇编| 成人亚洲一区| 97香蕉超级碰碰久久免费软件| 波多野结衣影片| 国产精品456露脸| 日本一区免费看| 国产福利视频在线| 色噜噜狠狠一区二区三区果冻| 欧美一级免费在线| 免费短视频成人日韩| 欧美老少做受xxxx高潮| 欧美一区二区三区网站| 国产高清不卡一区二区| 日本公妇乱淫免费视频一区三区| 天堂av最新在线| 欧美亚男人的天堂| 美女又爽又黄免费| 亚洲成人最新网站| 国产精品xxxxx| 搡老岳熟女国产熟妇| 亚洲欧洲日韩在线| 日韩精品无码一区二区三区免费| 日韩一区网站| 播播国产欧美激情| 极品国产91在线网站| 成人丝袜18视频在线观看| 一本一本a久久| 成人看片网站| 精品视频在线导航| 日本网站免费观看| 国产成人综合自拍| 国产又大又长又粗又黄| 国产亚洲人成a在线v网站| 亚洲欧美日本精品| 99热只有这里有精品| 成人小视频在线| 人人妻人人澡人人爽欧美一区| 亚洲男女网站| 一本色道久久88亚洲综合88| 天堂网av手机版| 99久久99久久精品免费观看| 高清无码视频直接看| 日本成人手机在线| 精品国内亚洲在观看18黄| 在线观看亚洲一区二区| 久久精品视频免费观看| 免费观看精品视频| 亚洲另类春色校园小说| 97av在线播放| 亚洲欧美日本在线观看| 精品久久久久久久久久久| 亚洲图片综合网| 一区二区三区福利| 欧美h视频在线| 成人做爰视频www网站小优视频| 国产偷国产偷亚洲清高网站| 欧美一区二区三区四| 久久人人爽人人爽| 九九热在线免费| 久久国产小视频| 91九色蝌蚪国产| 羞羞视频在线观看不卡| 日韩精品一区二区三区三区免费 | 国产精品成人99一区无码| 激情欧美丁香| 欧美美乳视频网站在线观看| 91精品影视| www日韩欧美| 国产黄a三级三级三级| 一区二区三区日韩欧美精品| www国产视频| 日韩精品电影一区亚洲| 一区二区国产日产| 99re91这里只有精品| 4438全国成人免费| 在线激情免费视频| 精品久久久久一区二区国产| 中日韩黄色大片| 国产精品视频在线看| 日本特黄在线观看| 99精品免费| 亚洲国产欧美日韩| 中文字幕日韩在线| 国产精品igao视频| 毛片激情在线观看| 日韩成人av在线播放| 伊人久久成人网| 亚洲一区在线观看视频| 美女爆乳18禁www久久久久久| 久久99精品网久久| 精品无码国产一区二区三区av | 吴梦梦av在线| 国产精品极品| 国产精品夜间视频香蕉| av毛片在线免费看| 欧美一级理论片| 中文字幕在线日本| 亚洲欧美国产三级| 在线观看欧美一区二区| 亚洲一区日韩| 最新欧美日韩亚洲| 都市激情久久| 成人女保姆的销魂服务| av日韩国产| 在线观看国产成人av片| 亚洲精品一区二区三区蜜桃| 欧美三级蜜桃2在线观看| 欧美精品videos极品| 26uuu亚洲综合色| 三区视频在线观看| 久久综合网络一区二区| 中文字幕人成一区| 神马久久影院| 国产成人在线精品| av日韩中文| 久久久精品亚洲| 欧美巨乳在线| 亚洲第一男人天堂| 夜夜嗨aⅴ一区二区三区| 亚洲成人免费视| 99成人在线观看| 91麻豆福利精品推荐| 久久久久久久久久久久久久久国产 | 国产特级黄色录像| 国产精品系列在线播放| jizz欧美激情18| 国产精品日韩久久久| 国产日本欧美在线| 成人一二三区| 欧美国产视频在线观看| 国产三级精品三级在线观看国产| 国产欧美精品一区二区三区-老狼 国产欧美精品一区二区三区介绍 国产欧美精品一区二区 | 欧美性猛交xxxx乱大交91| 肉丝袜脚交视频一区二区| 免费高清一区二区三区| 97视频热人人精品免费| 欧美日韩在线观看一区二区三区 | 久久精品盗摄| 自慰无码一区二区三区| 欧美jjzz| 中文字幕日韩一区二区三区不卡 | 三级网在线观看| 欧美亚洲在线日韩| 久久综合福利| 久久精品国产亚洲5555| 成人免费观看网站| 人人九九精品视频| 91中文字幕在线观看| 国产成人免费av一区二区午夜| 国产精品第一区| 日韩av大片站长工具| 青草青草久热精品视频在线网站| 色是在线视频| 97在线观看免费高清| 欧美性猛片xxxxx免费中国| 久久99热这里只有精品国产 | 欧美日韩电影在线观看| 免费网站免费进入在线| 久久精品视频播放| 毛片激情在线观看| 俺去了亚洲欧美日韩| 2021av在线| 欧美xxxx18国产| 最近中文字幕免费mv2018在线| 久久精品国产96久久久香蕉| av毛片在线免费看| 欧美激情高清视频| 成全电影大全在线观看| 久久久久久九九九| 天堂中文在线播放| 日韩av观看网址| 日韩漫画puputoon| 91免费综合在线| 亚洲日本va中文字幕| 成人免费视频网站| 大奶在线精品| 台湾成人av| 天天综合网91| www.欧美黄色| 久久综合九色| www.com黄色片| 国产在线精品一区在线观看麻豆| 国产女同无遮挡互慰高潮91| yourporn久久国产精品| 一级性生活毛片| 亚洲国产岛国毛片在线| 免费人成在线观看| 欧美日韩国产精品专区| 波多野结衣视频在线看| 欧美喷水一区二区| 欧美在线 | 亚洲| 亚洲欧美精品一区| 黄色在线观看网站| 欧美一区二区三区免费观看| 九九九伊在线综合永久| 91久久精品国产91久久| 日本在线一区二区三区| 日韩国产在线一区| 欧美喷水视频| 激情视频综合网| 成人免费高清在线观看| 中文字幕av网址| 亚洲私人黄色宅男| 在线免费观看国产精品| 91精品久久久久久久久99蜜臂| 欧美一级在线免费观看 | 成年网站在线| 久久久久久久电影一区| 国产另类xxxxhd高清| 国产乱码精品一区二区三区不卡| 国产欧美日韩视频在线| www.好吊操| 国内精品写真在线观看| 中文字字幕码一二三区| 一区二区三区四区激情| 不卡av电影在线| 精品福利av导航| 成人在线免费看| 性欧美暴力猛交69hd| 国产精品原创视频| 国产精品麻豆免费版| 中文精品久久| 99视频在线视频| a亚洲天堂av| 国产午夜精品一区二区理论影院 | 成人精品国产一区二区4080 | 一区二区欧美精品| 艳妇乳肉豪妇荡乳av无码福利| 日韩精品中文字幕在线| 国产人成网在线播放va免费| 日韩av手机在线看| 日韩一区二区三区色| 玖玖精品在线视频| 日本亚洲视频在线| 三级电影在线看| 欧美日韩免费网站| www.激情五月.com| 色吧影院999| 亚洲人体在线| 午夜视频久久久| 久久一区激情| 波多野结衣片子| 黑人极品videos精品欧美裸| 亚洲国产成人在线观看| 欧美高清第一页| 日韩高清一区| 蜜臀av性久久久久蜜臀av| 狠狠狠色丁香婷婷综合激情| 免费91在线观看| 在线视频国内一区二区| 超碰免费在线| 国产精品福利网| 色综合综合网| www.超碰com| 国产女人水真多18毛片18精品视频| 亚洲欧美自拍视频| 亚洲一级片在线看| 成人国产综合| 亚洲成人第一| 国产综合成人久久大片91| 国内毛片毛片毛片毛片毛片| 欧美羞羞免费网站| www视频在线看| 91超碰rencao97精品| 91精品国产91久久综合 | 99久久免费精品| 日本熟妇毛耸耸xxxxxx| 亚洲日本aⅴ片在线观看香蕉| 欧美天堂视频| 亚洲国产午夜伦理片大全在线观看网站 | 中文字幕人妻精品一区| 中文字幕亚洲一区| 四虎成人精品一区二区免费网站| 免费观看中文字幕| 国产福利91精品| 永久免费看片在线播放| 国产一区二区三区在线视频| 欧洲成人一区| 超碰97免费观看| 91麻豆国产香蕉久久精品| 怡红院av久久久久久久| 色青青草原桃花久久综合| 电影一区二区在线观看| 欧洲av无码放荡人妇网站| 久久精品一级爱片| 99久久精品日本一区二区免费| 欧美激情xxxxx| 美女毛片一区二区三区四区最新中文字幕亚洲| 久久久久人妻精品一区三寸| 国产精品色噜噜| 天天操天天干天天| 国产精品久久久久7777婷婷| 91精品久久久久久久蜜月|