深入理解cookie

2021-10-20 17:40:45 字數 3707 閱讀 2188

什麼是cookie,cookie的作用

cookie的工作機制,即cookie是運作流程

cookie的基本屬性(4個)以及我們如何使用cookie

客戶端傳送乙個請求到伺服器 --》 伺服器傳送乙個httpresponse響應到客戶端,其中包含set-cookie的頭部 --》客戶端儲存cookie,之後向伺服器傳送請求時,httprequest請求中會包含乙個cookie的頭部 --》伺服器返回響應資料

進行**測試可如下

瀏覽器輸入位址進行訪問,結果如圖所示

可見response headers中包含set-cookie頭部,而request headers中包含了cookie頭部。name和value正是上述設定的。

屬性項屬性項介紹

name=value

鍵值對,可以設定要儲存的 key/value,注意這裡的 name 不能和其他屬性項的名字一樣

expires

過期時間,在設定的某個時間點後該 cookie 就會失效

domain

生成該 cookie 的網域名稱,如 domain=「www.baidu.com」

path

該 cookie 是在當前的哪個路徑下生成的,如 path=/wp-admin/

secure

如果設定了這個屬性,那麼只會在 ssh 連線時才會回傳該 cookie

expires

該屬性用來設定cookie的有效期。cookie中的maxage用來表示該屬性,單位為秒。cookie中通過getmaxage()和setmaxage(int

maxage)來讀寫該屬性。maxage有3種值,分別為正數,負數和0。

如果maxage屬性為正數,則表示該cookie會在maxage秒之後自動失效。瀏覽器會將maxage為正數的cookie持久化,即寫到對應的cookie檔案中(每個瀏覽器儲存的位置不一致)。無論客戶關閉了瀏覽器還是電腦,只要還在maxage秒之前,登入**時該cookie仍然有效。下面**中的cookie資訊將永遠有效。

cookie cookie =

newcookie

("mcrwayfun"

,system.

currenttimemillis()

+"");

// 設定生命週期為max_value,永久有效

cookie.

setmaxage

(integer.

max_value);

resp.

addcookie

(cookie)

;

當maxage屬性為負數,則表示該cookie只是乙個臨時cookie,不會被持久化,僅在本瀏覽器視窗或者本視窗開啟的子視窗中有效,關閉瀏覽器後該cookie立即失效。

cookie cookie =

newcookie

("mcrwayfun"

,system.

currenttimemillis()

+"");

// maxage為負數,是乙個臨時cookie,不會持久化

cookie.

setmaxage(-

1); resp.

addcookie

(cookie)

;

可以看到,當maxage為-1時,時間已經過期

那麼maxage設定為負值和0到底有什麼區別呢?

maxage設定為負數,能看到expires屬性改變了,但cookie仍然會存在一段時間直到關閉瀏覽器或者重新開啟瀏覽器。

修改或者刪除cookie

httpservletresponse提供的cookie操作只有乙個addcookie(cookie

cookie),所以想要修改cookie只能使用乙個同名的cookie來覆蓋原先的cookie。如果要刪除某個cookie,則只需要新建乙個同名的cookie,並將maxage設定為0,並覆蓋原來的cookie即可。

新建的cookie,除了value、maxage之外的屬性,比如name、path、domain都必須與原來的一致才能達到修改或者刪除的效果。否則,瀏覽器將視為兩個不同的cookie不予覆蓋。

值得注意的是,從客戶端讀取cookie時,包括maxage在內的其他屬性都是不可讀的,也不會被提交。瀏覽器提交cookie時只會提交name和value屬性,maxage屬性只被瀏覽器用來判斷cookie是否過期,而不能用服務端來判斷。

我們無法在服務端通過cookie.getmaxage()來判斷該cookie是否過期,maxage只是乙個唯讀屬性,值永遠為-1。當cookie過期時,瀏覽器在與後台互動時會自動篩選過期cookie,過期了的cookie就不會被攜帶了

cookie是不可以跨網域名稱的,隱私安全機制禁止**非法獲取其他**的cookie。

正常情況下,同乙個一級網域名稱下的兩個二級網域名稱也不能互動使用cookie,比如test1.mcrwayfun.com和test2.mcrwayfun.com,因為二者的網域名稱不完全相同。如果想要mcrwayfun.com名下的二級網域名稱都可以使用該cookie,需要設定cookie的domain引數為.mcrwayfun.com,這樣使用test1.mcrwayfun.com和test2.mcrwayfun.com就能訪問同乙個cookie

path屬性決定允許訪問cookie的路徑。比如,設定為"/"表示允許所有路徑都可以使用cookie

補充:

補充一下下。無狀態是指web瀏覽器與web伺服器之間不需要建立持久的連線,這意味著當乙個客戶端向伺服器端發出請求,然後web伺服器返回響應(response),連線就被關閉了,在伺服器端不保留連線的有關資訊。也就是說,http請求只能由客戶端發起,而伺服器不能主動向客戶端傳送資料

深入理解session和cookie

理解乙個東西首先要知道它的由來,也就是為什麼會需要它,它的作用是什麼。cookie 隨著web的不斷發展,需求也在不斷的變化,從最初的全靜態頁面到後面的動態頁面。因為http協議是乙個無狀態的協議,當使用者的一次訪問結束後,後端伺服器就無法知道下一次來訪問的還是不是上一次訪問的使用者。由此w3c組織...

深入理解Cookie作用機制

對於cookie的基本知識即什麼是cookie可以看一下 這篇文章,都有詳細介紹 在做分布式專案的時候,不同的功能模組分布在不同的伺服器中,通過乙個位址去訪問另乙個位址,只要訪問協議,ip位址,埠號三者中的乙個地方不同,都會出現跨域問題 cookie是不可跨網域名稱的。網域名稱www.google....

深入理解C語言 深入理解指標

關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...