日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

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

來源: 責編: 時間:2024-02-29 14:42:53 239觀看
導讀前言對于前端來講,我們在操作cookie時往往都是基于document.cookie,但它有一個缺點就是操作復雜,它并沒有像localStorage那樣提供一些get或set等方法供我們使用。對與cookie的操作一切都是基于字符串來進行的。為了讓coo

前言

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

document.cookie

document.cookie可以獲取并設置當前文檔關聯的cookiexPx28資訊網——每日最新資訊28at.com

獲取cookie

const cookie = document.cookie

在上面的代碼中,cookie 被賦值為一個字符串,該字符串包含所有的 Cookie,每條 cookie 以"分號和空格 (; )"分隔 (即, key=value 鍵值對)。xPx28資訊網——每日最新資訊28at.com

圖片圖片xPx28資訊網——每日最新資訊28at.com

但這拿到的是一整個字符串,如果你想獲取cookie中的某一個字段,還需要自己處理xPx28資訊網——每日最新資訊28at.com

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值的xPx28資訊網——每日最新資訊28at.com

設置cookie

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

它的值是一個鍵值對形式的字符串。需要注意的是,用這個方法一次只能對一個 cookie 進行設置或更新。xPx28資訊網——每日最新資訊28at.com

比如:xPx28資訊網——每日最新資訊28at.com

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

這樣只有age能夠設置成功xPx28資訊網——每日最新資訊28at.com

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

這個值的格式參見Date.toUTCString() (en-US)xPx28資訊網——每日最新資訊28at.com

;path=path (例如 '/', '/mydir') 如果沒有定義,默認為當前文檔位置的路徑。xPx28資訊網——每日最新資訊28at.com

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

;max-age=max-age-in-seconds (例如一年為 606024*365)xPx28資訊網——每日最新資訊28at.com

;expires=date-in-GMTString-format

如果沒有定義,cookie 會在對話結束時過期xPx28資訊網——每日最新資訊28at.com

;secure (cookie 只通過 https 協議傳輸)xPx28資訊網——每日最新資訊28at.com

  • 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方法的封裝xPx28資訊網——每日最新資訊28at.com

刪除cookie

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

新方法cookieStore

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

圖片圖片xPx28資訊網——每日最新資訊28at.com

它提供了一些方法可以讓我們更加方便的操作cookiexPx28資訊網——每日最新資訊28at.com

獲取單個cookie

cookieStore.get(name)

該方法可以獲取對應key的單個cookie,并且以promise形式返回對應的值xPx28資訊網——每日最新資訊28at.com

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

圖片圖片xPx28資訊網——每日最新資訊28at.com

當獲取的cookie不存在時,則會返回nullxPx28資訊網——每日最新資訊28at.com

獲取所有cookie

cookieStore.getAll()

該方法可以獲取所有匹配的cookie,并且以promise形式返回一個列表xPx28資訊網——每日最新資訊28at.com

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

xPx28資訊網——每日最新資訊28at.com

當cookie不存在時,則會返回一個空數組xPx28資訊網——每日最新資訊28at.com

設置cookie

cookieStore.set()

該方法可以設置cookie,并且會返回一個promise狀態,表示是否設置成功xPx28資訊網——每日最新資訊28at.com

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

如果想要設置更多的屬性,比如:過期時間、路徑、域名等,可以傳入一個對象xPx28資訊網——每日最新資訊28at.com

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/')

xPx28資訊網——每日最新資訊28at.com

刪除cookie

cookieStore.delete(name)

該方法可以用來刪除指定的cookie,同樣會返回一個promise狀態,來表示是否刪除成功xPx28資訊網——每日最新資訊28at.com

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

xPx28資訊網——每日最新資訊28at.com

需要注意的是:即使刪除一個不存在的cookie也會返回刪除成功狀態xPx28資訊網——每日最新資訊28at.com

監聽cookie

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

xPx28資訊網——每日最新資訊28at.com

可以通過change事件來監聽cookie的變化,無論是通過cookieStore操作的,還是通過document.cookie來操作的都能夠監聽到。xPx28資訊網——每日最新資訊28at.com

該方法的返回值有兩個字段比較重要,分別是:change盒delete,它們都是數組類型。用來存放改變和刪除的cookie信息xPx28資訊網——每日最新資訊28at.com

監聽修改

調用set方法時,會觸發change事件,修改或設置的cookie會存放在change數組中xPx28資訊網——每日最新資訊28at.com

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/')

xPx28資訊網——每日最新資訊28at.com

??需要注意的是:xPx28資訊網——每日最新資訊28at.com

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

監聽刪除

調用delete方法時,會觸發change事件,刪除的cookie會存放在delete數組中xPx28資訊網——每日最新資訊28at.com

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')

xPx28資訊網——每日最新資訊28at.com

??需要注意的是:xPx28資訊網——每日最新資訊28at.com

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

兼容性

在使用該方法時需要注意瀏覽器的兼容性xPx28資訊網——每日最新資訊28at.com

xPx28資訊網——每日最新資訊28at.com

總結

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

本文鏈接:http://m.www897cc.com/showinfo-26-75335-0.html使用原生cookieStore方法,讓Cookie操作更簡單

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 33張圖探秘OpenFeign核心架構原理

下一篇: React 跨平臺開發指日可待!

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
亚洲欧美另类国产| 国产手机视频精品| 免费日韩精品中文字幕视频在线| 老司机免费视频一区二区三区 | 日韩视频免费看| 一本色道88久久加勒比精品| 亚洲性视频网址| 久久国产精品高清| 欧美成人免费网| 欧美性一区二区| 精品成人在线观看| 亚洲最新视频在线| 久久精品人人做人人爽| 欧美高清影院| 国产精品揄拍一区二区| 亚洲缚视频在线观看| 亚洲素人一区二区| 久久综合色天天久久综合图片| 欧美精品在线观看91| 国产亚洲福利| 日韩一级片网址| 欧美在线视频网站| 欧美绝品在线观看成人午夜影视| 国产日韩视频| av不卡在线看| 可以看av的网站久久看| 国产精品激情偷乱一区二区∴| 精品av久久707| 在线亚洲美日韩| 鲁鲁狠狠狠7777一区二区| 国产精品高潮呻吟| 亚洲国产精品久久久久婷婷884 | 欧美激情久久久| 国产午夜精品美女视频明星a级| 亚洲区中文字幕| 久久国产夜色精品鲁鲁99| 欧美日韩中文另类| 亚洲二区在线视频| 欧美综合二区| 国产精品vvv| 亚洲精品1234| 久久露脸国产精品| 国产精品日韩在线观看| 亚洲九九爱视频| 久久亚裔精品欧美| 国产欧美日韩三区| 亚洲深夜影院| 欧美精品一区二区三区蜜桃| 国产综合在线看| 亚洲欧美久久久| 欧美日韩三级| 最新日韩精品| 麻豆久久精品| 国产精品99久久久久久久vr| 欧美a级理论片| 国内精品久久久久影院 日本资源| 一区二区三区视频在线 | 黄色免费成人| 销魂美女一区二区三区视频在线| 欧美日本高清| 亚洲第一综合天堂另类专| 久久精品99国产精品日本| 国产精品乱看| 在线性视频日韩欧美| 欧美激情一区二区三区在线| 一区二区三区自拍| 久久国产精品久久国产精品| 国产精一区二区三区| 亚洲在线观看免费视频| 国产精品第十页| 在线亚洲高清视频| 欧美日韩三级电影在线| 99riav久久精品riav| 欧美激情在线有限公司| 亚洲国产精品日韩| 免费久久99精品国产自| 亚洲国产精品va在看黑人| 噜噜噜久久亚洲精品国产品小说| 激情综合色丁香一区二区| 久久九九久精品国产免费直播| 国产手机视频精品| 久久国产精品久久国产精品| 国产一区二区久久久| 欧美中文在线观看| 国产一区深夜福利| 久久久www| 一区二区三区在线高清| 久久综合九色综合久99| 亚洲电影在线看| 欧美激情在线免费观看| 99re这里只有精品6| 国产精品成人免费| 亚洲欧美日本伦理| 国产一区二区激情| 久久久久88色偷偷免费| 在线看欧美视频| 男人的天堂亚洲在线| 亚洲激情在线| 欧美日韩成人在线视频| 亚洲视频在线一区| 国产精品午夜视频| 久久精品国产精品亚洲| 1000部国产精品成人观看| 欧美激情视频网站| 在线视频精品一区| 国产欧美精品久久| 久久久999精品| 亚洲人成欧美中文字幕| 欧美日韩一二三四五区| 午夜精品福利视频| 国产亚洲欧美一区二区| 久久免费视频网站| 亚洲每日在线| 国产女人精品视频| 久久视频在线视频| 亚洲精品色图| 国产精品久久久久久久久久直播 | 能在线观看的日韩av| 日韩网站在线看片你懂的| 欧美视频一区二| 欧美一区二区高清在线观看| 伊人色综合久久天天五月婷| 欧美日本不卡高清| 欧美一区二区三区久久精品| 在线观看亚洲专区| 欧美日韩一区二区视频在线观看 | 影音先锋亚洲电影| 欧美日韩国产综合视频在线观看| 亚洲欧美网站| 在线欧美不卡| 亚洲天堂av电影| 国产欧美一区二区精品性色| 美日韩在线观看| 亚洲一级在线观看| 红桃视频一区| 欧美日韩在线播放一区| 久久激情中文| 夜夜嗨一区二区三区| 韩国三级电影一区二区| 欧美日韩国产成人在线免费| 久久av一区二区三区漫画| 亚洲久色影视| 国产日韩高清一区二区三区在线| 欧美国产一区在线| 欧美一区二区三区喷汁尤物| 亚洲激情成人| 国产欧美一区二区精品仙草咪 | 欧美日韩国产在线一区| 久久久久久久综合日本| 亚洲神马久久| 亚洲国产美女久久久久| 国产美女一区二区| 欧美激情一区二区三区高清视频| 欧美一区二区成人| 一区二区三区你懂的| 在线看片第一页欧美| 国产精品夜夜夜一区二区三区尤| 欧美激情欧美狂野欧美精品| 久久黄色网页| 亚洲欧美视频在线| 一区二区欧美激情| 亚洲国产99| 国产一区二区三区四区老人| 欧美日韩国产一区二区| 欧美xx视频| 久久国内精品自在自线400部| 亚洲视频在线观看一区| 亚洲国产清纯| 好看的日韩视频| 国产日韩欧美一二三区| 欧美性视频网站| 欧美另类久久久品| 牛牛精品成人免费视频| 久久久999| 欧美亚洲系列| 亚洲欧美中文字幕| 亚洲一区二区不卡免费| 99re6这里只有精品视频在线观看| 伊人精品在线| 国内精品**久久毛片app| 国产三区精品| 国产精品亚洲一区二区三区在线| 欧美日韩一视频区二区| 欧美精品偷拍| 欧美国产另类| 欧美jjzz| 欧美aⅴ一区二区三区视频| 久久综合电影| 久久中文在线| 久久久久久久一区二区三区| 性色一区二区三区| 亚洲欧美在线高清| 亚洲女人天堂av| 亚洲欧美不卡| 亚洲欧美一区二区视频| 亚洲在线播放| 亚洲欧美综合v| 亚洲欧美日韩系列| 亚洲女爱视频在线| 欧美一级黄色网| 欧美中文字幕在线播放| 久久精品视频在线看| 久久久久久亚洲精品杨幂换脸 | 国产亚洲午夜|