首頁 客戶案例 小(xiǎo)程序開(kāi)發 高(gāo)端網站建設 SEO優化(huà) APP開(kāi)發 關于 動态 聯系咨詢

企業(yè)做網站前端開(kāi)發中Cookie的(de)一些事(shì)

cookie操作(zuò)在前端開(kāi)發過程中經常遇到,當然如果隻是用來(lái)存儲一些簡單用戶數據,還(hái)是比較簡單的(de),我們要做的(de)可能隻是設置cookie名,值,過期時(shí)間(jiān)等,讀取也隻要根據cookie的(de)名讀取相(xiàng)應的(de)cookie值就可以了。在複雜(zá)的(de)應用中,光(guāng)這(zhè)些肯定就不夠了。

cookie的(de)屬性

除了name(名)和(hé)value(值),cookie還(hái)有(yǒu)以下(xià)一些可選屬性,用來(lái)控制cookie的(de)有(yǒu)效期,作(zuò)用域,安全性等:

expires屬性 指定了cookie的(de)生(shēng)存期,默認情況下(xià)cookie是暫時(shí)存在的(de),他(tā)們存儲的(de)值隻在浏覽器(qì)會話(huà)期間(jiān)存在,當用戶退出浏覽器(qì)後這(zhè)些值也會丢失,如果想讓cookie存在一段時(shí)間(jiān),就要為(wèi)expires屬性設置為(wèi)未來(lái)的(de)一個(gè)用毫秒數表示的(de)過期日(rì)期或時(shí)間(jiān)點,expires默認為(wèi)設置的(de)expires的(de)當前時(shí)間(jiān)。現(xiàn)在已經被max-age屬性所取代,max-age用秒來(lái)設置cookie的(de)生(shēng)存期。

如果max-age屬性為(wèi)正數,則表示該cookie會在max-age秒之後自(zì)動失效。浏覽器(qì)會将max-age為(wèi)正數的(de)cookie持久化(huà),即寫到對(duì)應的(de)cookie文(wén)件(jiàn)中。無論客戶關閉了浏覽器(qì)還(hái)是電(diàn)腦,隻要還(hái)在max-age秒之前,登錄網站時(shí)該cookie仍然有(yǒu)效。

如果max-age為(wèi)負數,則表示該cookie僅在本浏覽器(qì)窗口以及本窗口打開(kāi)的(de)子(zǐ)窗口內(nèi)有(yǒu)效,關閉窗口後該cookie即失效。max-age為(wèi)負數的(de)Cookie,為(wèi)臨時(shí)性cookie,不會被持久化(huà),不會被寫到cookie文(wén)件(jiàn)中。cookie信息保存在浏覽器(qì)內(nèi)存中,因此關閉浏覽器(qì)該cookie就消失了。cookie默認的(de)max-age值為(wèi)-1。

‍如果max-age為(wèi)0,則表示删除該cookie。cookie機(jī)制沒有(yǒu)提供删除cookie的(de)方法,因此通(tōng)過設置該cookie即時(shí)失效實現(xiàn)删除cookie的(de)效果。失效的(de)Cookie會被浏覽器(qì)從(cóng)cookie文(wén)件(jiàn)或者內(nèi)存中删除。

如果不設置expires或者max-age這(zhè)個(gè)cookie默認是Session的(de),也就是關閉浏覽器(qì)該cookie就消失了。

這(zhè)裏要說(shuō)明(míng)一下(xià):Session的(de)cookie在ie6下(xià),如果用戶實在網頁上(shàng)跳(tiào)轉打開(kāi)頁面或新開(kāi)窗口(包括target=”_blank”,鼠标右鍵新開(kāi)窗口),都(dōu)是在同一個(gè)Session內(nèi)。如果用戶新開(kāi)浏覽器(qì)程序或者說(shuō)是進程再打開(kāi)當前的(de)頁面就不是同一個(gè)Session。其他(tā)浏覽器(qì)隻要你(nǐ)Session存在,還(hái)是同一個(gè)Session,cookie還(hái)能共享。在前段時(shí)間(jiān)的(de)項目中ie6下(xià)吃(chī)了很(hěn)大一個(gè)虧。

domain屬性

domain屬性可以使多個(gè)web服務器(qì)共享cookie。domain屬性的(de)默認值是創建cookie的(de)網頁所在服務器(qì)的(de)主機(jī)名。不能将一個(gè)cookie的(de)域設置成服務器(qì)所在的(de)域之外(wài)的(de)域。 例如讓位于a.sodao.com的(de)服務器(qì)能夠讀取b.sodao.com設置的(de)cookie值。如果b.sodao.com的(de)頁面創建的(de)cookie把它的(de)path屬性設置為(wèi)”/”,把domain屬性設置成”.sodao.com”,那(nà)麽所有(yǒu)位于b.sodao.com的(de)網頁和(hé)所有(yǒu)位于a.sodao.com的(de)網頁,以及位于sodao.com域的(de)其他(tā)服務器(qì)上(shàng)的(de)網頁都(dōu)可以訪問(wèn)這(zhè)個(gè)cookie。

path屬性

它指定與cookie關聯在一起的(de)網頁。在默認的(de)情況下(xià)cookie會與創建它的(de)網頁,該網頁處于同一目錄下(xià)的(de)網頁以及與這(zhè)個(gè)網頁所在目錄下(xià)的(de)子(zǐ)目錄下(xià)的(de)網頁關聯

secure屬性

它是一個(gè)布爾值,指定在網絡上(shàng)如何傳輸cookie,默認是不安全的(de),通(tōng)過一個(gè)普通(tōng)的(de)http連接傳輸;

HttpOnly屬性

HttpOnly 屬性限制了 cookie 對(duì) HTTP 請求的(de)作(zuò)用範圍。特别的(de),該屬性指示用戶代理(lǐ)忽略那(nà)些通(tōng)過”非 HTTP” 方式對(duì) cookie 的(de)訪問(wèn)(比如浏覽器(qì)暴露給js的(de)接口)。注意 HttpOnly 屬性和(hé) Secure 屬性相(xiàng)互獨立:一個(gè) cookie 既可以是 HttpOnly 的(de)也可以有(yǒu) Secure 屬性。 在前段時(shí)間(jiān)的(de)項目中我就用js去(qù)讀取一個(gè)cookie,結果怎麽都(dōu)取不到這(zhè)個(gè)值,最後查證這(zhè)個(gè)cookie是httpOnly的(de),花(huā)了近(jìn)2個(gè)小(xiǎo)時(shí),悲劇(jù)了。

cookie的(de)傳輸

浏覽器(qì)将cookie信息以name-value對(duì)的(de)形式存儲于本地(dì),每當請求新文(wén)檔時(shí),浏覽器(qì)将發送Cookie,目的(de)是讓Server可以通(tōng)過HTTP請求追蹤客戶。所以從(cóng)WEB性能的(de)角度來(lái)說(shuō)我們要盡量的(de)減小(xiǎo)cookie,以達到傳輸性能的(de)最大化(huà)。

cookie的(de)編碼和(hé)解碼

由于cookie的(de)名/值中的(de)值不允許包含分号,逗号和(hé)空格符,為(wèi)了最大化(huà)用戶代理(lǐ)和(hé)服務器(qì)的(de)兼容性,任何被存儲為(wèi) cookie 值的(de)數據都(dōu)應該被編碼,例如用我們前端熟知的(de)js全局函數encodeURIComponent編碼和(hé)decodeURIComponent解碼。

cookie作(zuò)為(wèi)客戶端存儲

前面說(shuō)了每當請求新文(wén)檔時(shí),浏覽器(qì)将發送Cookie到服務器(qì),導緻WEB性能下(xià)降。所以不建議(yì)将cookie作(zuò)為(wèi)客戶端存儲一種實現(xiàn)方案,替代方案參見:JavaScript本地(dì)存儲實踐(html5的(de)localStorage和(hé)ie的(de)userData)等。

同名的(de) cookie

同名的(de) cookie,不同的(de) domain 或不同的(de) path,屬不同的(de) cookie;同名的(de) cookie,相(xiàng)同的(de) domain 且相(xiàng)同的(de) path,不同的(de) expires,屬同一個(gè) cookie。

日(rì)期:2024年(nián)03月(yuè)19日(rì)

标簽: 淺談前端開(kāi)發中Cookie的(de)一些事(shì)

獲取您的(de)項目定制及優化(huà)報價。

* 為(wèi)廣州天河、白雲、海(hǎi)珠、番禺、花(huā)都(dōu)、南沙區(qū)提供網站建設服務。
線上(shàng)服務咨詢 微(wēi)信二維碼 13609002706 免費(fèi)獲取診斷報告