深入理解cookie,在原文基礎上做了一丟丟修改
朋友問我cookie是什麼,用來幹什麼的,可是我居然無法清楚明白簡短地向其闡述cookie,這不禁讓我陷入了沉思:為什麼我無法解釋清楚,我對學習的方法產生了懷疑!在知乎上看到有人推薦使用費爾曼學習技巧,於是在重新學習cookie的過程中使用了該技巧來試驗,效果有待驗證!
在學習乙個新的知識點前,我們應該明白自己的學習目標,要帶著疑問去學習,該小節須要了解:
什麼是cookie,cookie的作用
cookie的工作機制,即cookie的運作流程
cookie的基本屬性(4個)以及我們如何使用cookie
http協議本身是無狀態的。cookie實際上是一小段的文字資訊(key-value格式)。客戶端向伺服器發起請求,如果伺服器需要記錄該使用者狀態,就使用response向客戶端瀏覽器頒發乙個cookie。客戶端瀏覽器會把cookie儲存起來。當瀏覽器再請求該**時,瀏覽器把請求的**連同該cookie一同提交給伺服器。伺服器檢查該cookie,以此來辨認使用者狀態。
舉個栗子:我們去銀行辦理儲蓄業務,第一次給你辦了張銀行卡,裡面存放了身份證、密碼、手機等個人資訊。當你下次再來這個銀行時,銀行機器能識別你的卡,從而能夠直接辦理業務。
客戶端傳送乙個請求到伺服器—>伺服器傳送乙個httpresponse響應到客戶端,其中包含set-cookie的頭部—>客戶端儲存cookie,之後向伺服器傳送請求時,httprequest請求中會包含乙個cookie的頭部—>伺服器返回響應資料
為了**這個過程,寫了**進行測試,如下:
我在doget方法中,new了乙個cookie物件並將其加入到了httpresponse物件中
瀏覽器輸入位址進行訪問,結果如圖所示:
可見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
該屬性用來設定cookie的有效期。cookie中的maxage用來表示該屬性,單位為秒。cookie中通過getmaxage()和setmaxage(int maxage)來讀寫該屬性。maxage有3種值,分別為正數,負數和0。
可以看到,當maxage為-1時,時間已經過期
req.
getcookies()
; cookie cookie = null;
// get cookie
for(cookie ck : cookies)}if
(null != cookie)
```
那麼maxage設定為負值和0到底有什麼區別呢?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
敏捷到底是什麼?
文 ivar jacobson 在支援軟體工程 比如rational統一過程rup 與敏捷陣營 比如scrum或是xp 之間,人們一直存在著衝突。也不難理解,因為這兩種方法間都是在用著彼此並不相容的方式來描述的。其實大可不必,因為他們背後的觀點全然是相輔相成的。關鍵在於該如何用對兩者來說都公平的方式...
我們到底是什麼?
我們到底是什麼?我們是一種生物電流 生物電流有幾種狀態,喜怒哀樂等,可以根據外部環境進行自我切換 該種生物電流附屬在一種器官硬體上面 我們可以從器官硬體上感知一些資訊,產生新的資訊生物電流,新產生的生物電流符合原先的標準 我們可以把資訊電流儲存在器官硬體上,但具體如何儲存等資訊無法被我們感知 我們的...
SDN到底是什麼
sdn到底是什麼?雖然這個概念已經被炒到了,但還沒有人對其給出乙個明確的概念。盛科網路總監張衛峰撰寫了自己關注sdn以來,對其認識的四個階段,最後乙個階段又回到了sdn字面的意思軟體定義網路,每個階段作者的新觀點,也會給我們帶來一些啟發。以下為原文 我對sdn的認識可以分為四個階段,最後乙個階段是在...