1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問(wèn)題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
      Cookie的讀寫(xiě)操作怎么實(shí)現(xiàn)-創(chuàng)新互聯(lián)

      本篇內(nèi)容主要講解“Cookie的讀寫(xiě)操作怎么實(shí)現(xiàn)”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Cookie的讀寫(xiě)操作怎么實(shí)現(xiàn)”吧!

      10年積累的做網(wǎng)站、成都網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有阿克蘇免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

        一、Cookie的出現(xiàn)

        瀏覽器和服務(wù)器之間的通信少不了HTTP協(xié)議,但是因?yàn)镠TTP協(xié)議是無(wú)狀態(tài)的,所以服務(wù)器并不知道上一次瀏覽器做了什么樣的操作,這樣嚴(yán)重阻礙了交互式Web 應(yīng)用程序的實(shí)現(xiàn)。

        針對(duì)上述的問(wèn)題,網(wǎng)景公司的程序員創(chuàng)造了Cookie。

        二、Cookie的傳輸

        服務(wù)器端在實(shí)現(xiàn)Cookie標(biāo)準(zhǔn)的過(guò)程中,需要對(duì)任意HTTP請(qǐng)求發(fā)送Set-Cookie HTTP頭作為響應(yīng)的一部分:

        1. Set-Cookie: name=value; expires=Tue, 03-Sep-2019 14:10:21 GMT; path=/; domain=.xxx.com;

        瀏覽器端會(huì)存儲(chǔ)這樣的Cookie,并且為之后的每個(gè)請(qǐng)求添加Cookie HTTP請(qǐng)求頭發(fā)送回服務(wù)器:

        1. Cookie: name=value

        服務(wù)器通過(guò)驗(yàn)證Cookie值,來(lái)判斷瀏覽器發(fā)送請(qǐng)求屬于哪一個(gè)用戶。

        三、瀏覽器中的Cookie

        瀏覽器中的Cookie主要由以下幾部分組成:

        · 名稱:Cookie唯一的名稱,必須經(jīng)過(guò)URL編碼處理。(同名會(huì)出現(xiàn)覆蓋的情況)

        · 值:必須經(jīng)過(guò)URL編碼處理。

        · 域(domain):默認(rèn)情況下cookie在當(dāng)前域下有效,你也可以設(shè)置該值來(lái)確保對(duì)其子域是否有效。

        · 路徑(path):指定Cookie在哪些路徑下有效,默認(rèn)是當(dāng)前路徑下。

        · 失效時(shí)間(expires):默認(rèn)情況下,瀏覽器會(huì)話結(jié)束時(shí)會(huì)自動(dòng)刪除Cookie;也可以設(shè)置一個(gè)GMT格式的日期,指定具體的刪除日期;如果設(shè)置的日期為以前的日期,那么Cookie會(huì)立即刪除。

        · 安全標(biāo)志(secure):指定之后只允許Cookie發(fā)送給https協(xié)議。

        瀏覽器在發(fā)送請(qǐng)求時(shí),只會(huì)將名稱與值添加到請(qǐng)求頭的Cookie字段中,發(fā)送給服務(wù)端。

        瀏覽器提供了一個(gè)非常蹩腳的API來(lái)操作Cookie:

        1. document.cookie

        通過(guò)上述方法可以對(duì)該Cookie進(jìn)行寫(xiě)操作,每一次只能寫(xiě)入一條Cookie字符串:

        1. document.cookie = 'a=1; secure; path=/'

        通過(guò)該方法還可以進(jìn)行Cookie的讀操作:

        1. document.cookie // "a=1"

        由于上述方法操作Cookie非常的不直觀,一般都會(huì)寫(xiě)一些函數(shù)來(lái)簡(jiǎn)化Cookie讀取、設(shè)置和刪除操作。

        對(duì)于Cookie的設(shè)置操作中,需要以下幾點(diǎn):

        對(duì)于名稱和值進(jìn)行URL編碼處理,也就是采用JavaScript中的encodeURIComponent()方法; expires要求傳入GMT格式的日期,需要處理為更易書(shū)寫(xiě)的方式,比如:設(shè)置秒數(shù)的方式; 注意只有的屬性名的secure;

        每一段信息需要采用分號(hào)加空格。

        1. function setCookie (key, value, attributes) {

        2. if (typeof document === 'undefined') {

        3. return

        4. }

        5. attributes = Object.assign({}, {

        6. path: '/'

        7. }, attributes)

        8.

        9. let { domain, path, expires, secure } = attributes

        10.

        11. if (typeof expires === 'number') {

        12. expires = new Date(Date.now() + expires * 1000)

        13. }

        14. if (expires instanceof Date) {

        15. expires = expires.toUTCString()

        16. } else {

        17. expires = ''

        18. }

        19.

        20. key = encodeURIComponent(key)

        21. value = encodeURIComponent(value)

        22.

        23. let cookieStr = `${key}=${value}`

        24.

        25. if (domain) {

        26. cookieStr += `; domain=${domain}`

        27. }

        28.

        29. if (path) {

        30. cookieStr += `; path=${path}`

        31. }

        32.

        33. if (expires) {

        34. cookieStr += `; expires=${expires}`

        35. }

        36.

        37. if (secure) {

        38. cookieStr += `; secure`

        39. }

        40.

        41. return (document.cookie = cookieStr)

        42.}

        Cookie的讀操作需要注意的是將名稱與值進(jìn)行URL解碼處理,也就是調(diào)用JavaScript中的decodeURIComponent()方法:

        1. function getCookie (name) {

        2. if (typeof document === 'undefined') {

        3. return

        4. }

        5. let cookies = []

        6. let jar = {}

        7. document.cookie && (cookies = document.cookie.split('; '))

        8.

        9. for (let i = 0, max = cookies.length; i < max; i++) {

        10. let [key, value] = cookies[i].split('=')

        11. key = decodeURIComponent(key)

        12. value = decodeURIComponent(value)

        13. jar[key] = value

        14. if (key === name) {

        15. break

        16. }

        17. }

        18.

        19. return name ? jar[name] : jar

        20.}

        最后一個(gè)清除的方法就更加簡(jiǎn)單了,只要將失效日期(expires)設(shè)置為過(guò)去的日期即可:

        1. function removeCookie (key) {

        2. setCookie(key, '', { expires: -1 })

        3. }

        介紹Cookie基本操作的封裝之后,還需要了解瀏覽器為了限制Cookie不會(huì)被惡意使用,規(guī)定了Cookie所占磁盤(pán)空間的大小以及每個(gè)域名下Cookie的個(gè)數(shù)。

        四、服務(wù)端的Cookie

        相比較瀏覽器端,服務(wù)端執(zhí)行Cookie的寫(xiě)操作時(shí),是將拼接好的Cookie字符串放入響應(yīng)頭的Set-Cookie字段中;執(zhí)行Cookie的讀操作時(shí),則是解析HTTP請(qǐng)求頭字段Cookie中的鍵值對(duì)。

        與瀏覽器大的不同,在于服務(wù)端對(duì)于Cookie的安全性操碎了心

        signed

        當(dāng)設(shè)置signed=true時(shí),服務(wù)端會(huì)對(duì)該條Cookie字符串生成兩個(gè)Set-Cookie響應(yīng)頭字段:

        1. Set-Cookie: lastTime=2019-03-05T14:31:05.543Z; path=/; httponly

        2. Set-Cookie: lastTime.sig=URXREOYTtMnGm0b7qCYFJ2Db400; path=/; httponly

        這里通過(guò)再發(fā)送一條以.sig為后綴的名稱以及對(duì)值進(jìn)行加密的Cookie,來(lái)驗(yàn)證該條Cookie是否在傳輸?shù)倪^(guò)程中被篡改。

        httpOnly

        服務(wù)端Set-Cookie字段中新增httpOnly屬性,當(dāng)服務(wù)端在返回的Cookie信息中含有httpOnly字段時(shí),開(kāi)發(fā)者是不能通過(guò)JavaScript來(lái)操縱該條Cookie字符串的。

        這樣做的好處主要在于面對(duì)XSS(Cross-site scripting)攻擊時(shí),黑客無(wú)法拿到設(shè)置httpOnly字段的Cookie信息。

        此時(shí),你會(huì)發(fā)現(xiàn)localStorage相比較Cookie,在XSS攻擊的防御上就略遜一籌了。 sameSite

        在介紹這個(gè)新屬性之前,首先你需要明白:當(dāng)用戶從http://a.com發(fā)起http://b.com的請(qǐng)求也會(huì)攜帶上Cookie,而從http://a.com攜帶過(guò)來(lái)的Cookie稱為第三方Cookie。

        雖然第三方Cookie有一些好處,但是給CSRF(Cross-site request forgrey)攻擊的機(jī)會(huì)。

        為了從根源上解決CSRF攻擊,sameSite屬性便閃亮登場(chǎng)了,它的取值有以下幾種:

        · strict:瀏覽器在任何跨域請(qǐng)求中都不會(huì)攜帶Cookie,這樣可以有效的防御CSRF攻擊,但是對(duì)于有多個(gè)子域名的網(wǎng)站采用主域名存儲(chǔ)用戶登錄信息的場(chǎng)景,每個(gè)子域名都需要用戶重新登錄,造成用戶體驗(yàn)非常的差。

        · lax:相比較strict,它允許從三方網(wǎng)站跳轉(zhuǎn)過(guò)來(lái)的時(shí)候使用Cookie。

        為了方便大家理解sameSite的實(shí)際效果,可以看這個(gè)例子:

        1. // a.com 服務(wù)端會(huì)在訪問(wèn)頁(yè)面時(shí)返回如下Cookie

        2. cookies.set('foo', 'aaaaa')

        3. cookies.set('bar', 'bbbbb')

        4. cookies.set('name', 'cccccc')

        5.

        6. // b.com 服務(wù)端會(huì)在訪問(wèn)頁(yè)面時(shí)返回如下Cookie

        7. cookies.set('foo', 'a', { sameSite: 'strict' })

        8. cookies.set('bar', 'b', { sameSite: 'lax' })

        9. cookies.set('baz', 'c')

        如何現(xiàn)在用戶在a.com中點(diǎn)擊鏈接跳轉(zhuǎn)到b.com,它的請(qǐng)求頭是這樣的:

        1. Request Headers

        2.

        3. Cookie: bar=b; baz=c

        五、網(wǎng)站性能優(yōu)化

        Cookie在服務(wù)端和瀏覽器的通信中,主要依靠HTTP的響應(yīng)頭和請(qǐng)求頭傳輸?shù)模訡ookie會(huì)占據(jù)一定的帶寬。

        前面提到瀏覽器會(huì)為每一次HTPP請(qǐng)求自動(dòng)攜帶上Cookie信息,但是對(duì)于同站內(nèi)的靜態(tài)資源,服務(wù)器并不需要處理其攜帶的Cookie,這無(wú)形中便浪費(fèi)了帶寬。

        在最佳實(shí)踐中,一般都會(huì)將靜態(tài)資源部署到獨(dú)立的域名上,從而可以避免無(wú)效Cookie的影響。

      到此,相信大家對(duì)“Cookie的讀寫(xiě)操作怎么實(shí)現(xiàn)”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!


      分享題目:Cookie的讀寫(xiě)操作怎么實(shí)現(xiàn)-創(chuàng)新互聯(lián)
      地址分享:http://ef60e0e.cn/article/dgssee.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        宁武县| 四会市| 明溪县| 绥中县| 新津县| 乌兰县| 新河县| 武宣县| 沁水县| 新竹市| 白银市| 台江县| 临猗县| 志丹县| 新泰市| 平邑县| 盐城市| 南通市| 太谷县| 桃园市| 洛南县| 静海县| 崇阳县| 眉山市| 蓬安县| 汉沽区| 札达县| 上林县| 邹城市| 泰州市| 洛浦县| 明光市| 拜泉县| 乌拉特前旗| 罗甸县| 清流县| 太原市| 宁远县| 北安市| 乌苏市| 泰和县|