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

當(dāng)前位置:首頁(yè) > 科技  > 軟件

使用原生cookieStore方法,讓Cookie操作更簡(jiǎn)單

來(lái)源: 責(zé)編: 時(shí)間:2024-02-29 14:42:53 175觀看
導(dǎo)讀前言對(duì)于前端來(lái)講,我們?cè)诓僮鱟ookie時(shí)往往都是基于document.cookie,但它有一個(gè)缺點(diǎn)就是操作復(fù)雜,它并沒(méi)有像localStorage那樣提供一些get或set等方法供我們使用。對(duì)與cookie的操作一切都是基于字符串來(lái)進(jìn)行的。為了讓coo

前言

對(duì)于前端來(lái)講,我們?cè)诓僮鱟ookie時(shí)往往都是基于document.cookie,但它有一個(gè)缺點(diǎn)就是操作復(fù)雜,它并沒(méi)有像localStorage那樣提供一些get或set等方法供我們使用。對(duì)與cookie的操作一切都是基于字符串來(lái)進(jìn)行的。為了讓cookie的操作更簡(jiǎn)便, Chrome87率先引入了cookieStore方法。MGR28資訊網(wǎng)——每日最新資訊28at.com

document.cookie

document.cookie可以獲取并設(shè)置當(dāng)前文檔關(guān)聯(lián)的cookieMGR28資訊網(wǎng)——每日最新資訊28at.com

獲取cookie

const cookie = document.cookie

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

圖片圖片MGR28資訊網(wǎng)——每日最新資訊28at.com

但這拿到的是一整個(gè)字符串,如果你想獲取cookie中的某一個(gè)字段,還需要自己處理MGR28資訊網(wǎng)——每日最新資訊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'))  // 前端南玖

比如上面這段代碼就是用來(lái)獲取單個(gè)cookie值的MGR28資訊網(wǎng)——每日最新資訊28at.com

設(shè)置cookie

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

它的值是一個(gè)鍵值對(duì)形式的字符串。需要注意的是,用這個(gè)方法一次只能對(duì)一個(gè) cookie 進(jìn)行設(shè)置或更新。MGR28資訊網(wǎng)——每日最新資訊28at.com

比如:MGR28資訊網(wǎng)——每日最新資訊28at.com

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

這樣只有age能夠設(shè)置成功MGR28資訊網(wǎng)——每日最新資訊28at.com

  • 以下可選的 cookie 屬性值可以跟在鍵值對(duì)后,用來(lái)具體化對(duì) cookie 的設(shè)定/更新,使用分號(hào)以作分隔:

這個(gè)值的格式參見Date.toUTCString() (en-US)MGR28資訊網(wǎng)——每日最新資訊28at.com

;path=path (例如 '/', '/mydir') 如果沒(méi)有定義,默認(rèn)為當(dāng)前文檔位置的路徑。MGR28資訊網(wǎng)——每日最新資訊28at.com

;domain=domain (例如 'example.com', 'subdomain.example.com') 如果沒(méi)有定義,默認(rèn)為當(dāng)前文檔位置的路徑的域名部分。與早期規(guī)范相反的是,在域名前面加 . 符將會(huì)被忽視,因?yàn)闉g覽器也許會(huì)拒絕設(shè)置這樣的 cookie。如果指定了一個(gè)域,那么子域也包含在內(nèi)。MGR28資訊網(wǎng)——每日最新資訊28at.com

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

;expires=date-in-GMTString-format

如果沒(méi)有定義,cookie 會(huì)在對(duì)話結(jié)束時(shí)過(guò)期MGR28資訊網(wǎng)——每日最新資訊28at.com

;secure (cookie 只通過(guò) https 協(xié)議傳輸)MGR28資訊網(wǎng)——每日最新資訊28at.com

  • cookie 的值字符串可以用encodeURIComponent() (en-US)來(lái)保證它不包含任何逗號(hào)、分號(hào)或空格 (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庫(kù)對(duì)setCookie方法的封裝MGR28資訊網(wǎng)——每日最新資訊28at.com

刪除cookie

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

新方法cookieStore

以上就是通過(guò)document.cookie來(lái)操作cookie的方法,未封裝方法之前操作起來(lái)都非常的不方便。現(xiàn)在我們?cè)賮?lái)了解一下新方法cookieStore,它是一個(gè)類似localStorage的全局對(duì)象。MGR28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片MGR28資訊網(wǎng)——每日最新資訊28at.com

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

獲取單個(gè)cookie

cookieStore.get(name)

該方法可以獲取對(duì)應(yīng)key的單個(gè)cookie,并且以promise形式返回對(duì)應(yīng)的值MGR28資訊網(wǎng)——每日最新資訊28at.com

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

圖片圖片MGR28資訊網(wǎng)——每日最新資訊28at.com

當(dāng)獲取的cookie不存在時(shí),則會(huì)返回nullMGR28資訊網(wǎng)——每日最新資訊28at.com

獲取所有cookie

cookieStore.getAll()

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

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

MGR28資訊網(wǎng)——每日最新資訊28at.com

當(dāng)cookie不存在時(shí),則會(huì)返回一個(gè)空數(shù)組MGR28資訊網(wǎng)——每日最新資訊28at.com

設(shè)置cookie

cookieStore.set()

該方法可以設(shè)置cookie,并且會(huì)返回一個(gè)promise狀態(tài),表示是否設(shè)置成功MGR28資訊網(wǎng)——每日最新資訊28at.com

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

如果想要設(shè)置更多的屬性,比如:過(guò)期時(shí)間、路徑、域名等,可以傳入一個(gè)對(duì)象MGR28資訊網(wǎng)——每日最新資訊28at.com

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

MGR28資訊網(wǎng)——每日最新資訊28at.com

刪除cookie

cookieStore.delete(name)

該方法可以用來(lái)刪除指定的cookie,同樣會(huì)返回一個(gè)promise狀態(tài),來(lái)表示是否刪除成功MGR28資訊網(wǎng)——每日最新資訊28at.com

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

MGR28資訊網(wǎng)——每日最新資訊28at.com

需要注意的是:即使刪除一個(gè)不存在的cookie也會(huì)返回刪除成功狀態(tài)MGR28資訊網(wǎng)——每日最新資訊28at.com

監(jiān)聽cookie

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

MGR28資訊網(wǎng)——每日最新資訊28at.com

可以通過(guò)change事件來(lái)監(jiān)聽cookie的變化,無(wú)論是通過(guò)cookieStore操作的,還是通過(guò)document.cookie來(lái)操作的都能夠監(jiān)聽到。MGR28資訊網(wǎng)——每日最新資訊28at.com

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

監(jiān)聽修改

調(diào)用set方法時(shí),會(huì)觸發(fā)change事件,修改或設(shè)置的cookie會(huì)存放在change數(shù)組中MGR28資訊網(wǎng)——每日最新資訊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('設(shè)置成功')  }).catch(err => {    console.log('設(shè)置失敗')  })}setCookie('site', 'https://bettersong.github.io/nanjiu/')

MGR28資訊網(wǎng)——每日最新資訊28at.com

??需要注意的是:MGR28資訊網(wǎng)——每日最新資訊28at.com

  • 通過(guò)document.cookie設(shè)置或刪除cookie時(shí),都是會(huì)觸發(fā)change事件,不會(huì)觸發(fā)delete事件
  • 即使兩次設(shè)置cookie的name和value都相同,也會(huì)觸發(fā)change事件

監(jiān)聽刪除

調(diào)用delete方法時(shí),會(huì)觸發(fā)change事件,刪除的cookie會(huì)存放在delete數(shù)組中MGR28資訊網(wǎng)——每日最新資訊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')

MGR28資訊網(wǎng)——每日最新資訊28at.com

??需要注意的是:MGR28資訊網(wǎng)——每日最新資訊28at.com

  • 如果刪除一個(gè)不存在的cookie,則不會(huì)觸發(fā)change事件

兼容性

在使用該方法時(shí)需要注意瀏覽器的兼容性MGR28資訊網(wǎng)——每日最新資訊28at.com

MGR28資訊網(wǎng)——每日最新資訊28at.com

總結(jié)

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

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

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 33張圖探秘OpenFeign核心架構(gòu)原理

下一篇: React 跨平臺(tái)開發(fā)指日可待!

標(biāo)簽:
  • 熱門焦點(diǎn)
  • MIX Fold3包裝盒泄露 新機(jī)本月登場(chǎng)

    小米的全新折疊屏旗艦MIX Fold3將于本月發(fā)布,近日該機(jī)的真機(jī)包裝盒在網(wǎng)上泄露。從圖上來(lái)看,新的MIX Fold3包裝盒在外觀設(shè)計(jì)方面延續(xù)了之前的方案,變化不大,這也是目前小米旗艦
  • 5月iOS設(shè)備好評(píng)榜:iPhone 14僅排第43?

    來(lái)到新的一月,安兔兔的各個(gè)榜單又重新匯總了數(shù)據(jù),像安卓陣營(yíng)的榜單都有著比較大的變動(dòng),不過(guò)iOS由于設(shè)備的更新?lián)Q代并沒(méi)有那么快,所以相對(duì)來(lái)說(shuō)變化并不大,特別是iOS好評(píng)榜,老款設(shè)
  • 一文掌握 Golang 模糊測(cè)試(Fuzz Testing)

    模糊測(cè)試(Fuzz Testing)模糊測(cè)試(Fuzz Testing)是通過(guò)向目標(biāo)系統(tǒng)提供非預(yù)期的輸入并監(jiān)視異常結(jié)果來(lái)發(fā)現(xiàn)軟件漏洞的方法。可以用來(lái)發(fā)現(xiàn)應(yīng)用程序、操作系統(tǒng)和網(wǎng)絡(luò)協(xié)議等中的漏洞或
  • 年輕人的“職場(chǎng)羞恥感”,無(wú)處不在

    作者:馮曉亭 陶 淘 李 欣 張 琳 馬舒葉來(lái)源:燃次元&ldquo;人在職場(chǎng),應(yīng)該選擇什么樣的著裝?&rdquo;近日,在網(wǎng)絡(luò)上,一個(gè)與著裝相關(guān)的帖子引發(fā)關(guān)注,在該帖子里,一位在高級(jí)寫字樓亞洲金
  • 認(rèn)真聊聊東方甄選:如何告別低垂的果實(shí)

    來(lái)源:山核桃作者:財(cái)經(jīng)無(wú)忌爆火一年后,俞敏洪和他的東方甄選依舊是頗受外界關(guān)心的&ldquo;網(wǎng)紅&rdquo;。7月5日至9日,為期5天的東方甄選&ldquo;甘肅行&rdquo;首次在自有App內(nèi)直播,
  • 三星Galaxy Z Fold5官方渲染圖曝光:13.4mm折疊厚度依舊感人

    據(jù)官方此前宣布,三星將于7月26日在韓國(guó)首爾舉辦Unpacked活動(dòng),屆時(shí)將帶來(lái)帶來(lái)包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy Z Flip 5、
  • OPPO K11采用全方位護(hù)眼屏:三大護(hù)眼能力減輕視覺(jué)疲勞

    日前OPPO官方宣布,全新的OPPO K11將于7月25日正式發(fā)布,將主打旗艦影像,和同檔位競(jìng)品相比,其最大的賣點(diǎn)就是將配備索尼IMX890主攝,堪稱是2000檔位影像表
  • Windows 11發(fā)布,微軟一改往常對(duì)老機(jī)型開放的態(tài)度

    距離 Windows 11 發(fā)布已經(jīng)過(guò)去一周,在過(guò)去一周里,很多數(shù)碼愛好者圍繞其對(duì) Android 應(yīng)用的支持、對(duì)老機(jī)型的升級(jí)問(wèn)題展開了激烈討論。與以往不同的是,在這次大
  • 世界人工智能大會(huì)國(guó)際日開幕式活動(dòng)在世博展覽館開啟

    30日上午,世界人工智能大會(huì)國(guó)際日開幕式活動(dòng)在世博展覽館開啟,聚集國(guó)際城市代表、重量級(jí)院士專家、國(guó)際創(chuàng)新企業(yè)代表,共同打造人工智能交流平臺(tái)。上海市副市
Top 主站蜘蛛池模板: 黄大仙区| 元江| 新余市| 滦南县| 塔城市| 岱山县| 荥阳市| 灵宝市| 汉川市| 武平县| 繁昌县| 正宁县| 巫山县| 隆尧县| 德钦县| 冀州市| 靖西县| 庆安县| 林芝县| 奈曼旗| 龙口市| 常宁市| 巩留县| 正宁县| 吴川市| 昂仁县| 华阴市| 普宁市| 巩留县| 济阳县| 高青县| 奉贤区| 托克逊县| 阳东县| 东阳市| 台南市| 双城市| 长宁县| 泰顺县| 邯郸县| 潮州市|