存儲類型
他們均只能存儲字符串類型的對象(雖然規(guī)范中可以存儲其他原生類型的對象,但是目前為止沒有瀏覽器對其進行實現(xiàn))。
瀏覽器允許每個域名所包含的cookie數(shù):
IE6-最大限制20條,IE7+允許每個域名50個cookie。Firefox每個域名cookie限制為50個。Opera每個域名cookie限制為30個。Safari/WebKit和chrome沒有cookie限制。但是如果cookie很多,則會使header大小超過服務(wù)器的處理的限制,會導(dǎo)致錯誤發(fā)生。
且所有瀏覽器限制每個cookie長度不能超過4KB,否則會被截掉。
所以:現(xiàn)代瀏覽器cookie個數(shù)不要超過50條,大小不能超過4KB。
安全性問題
客服端每次訪問服務(wù)端都會攜帶cookie,cookie容易被人攔截,所有的session信息被公開。即使加密也與事無補,因為攔截者并不需要知道cookie的意義,他只要原樣轉(zhuǎn)發(fā)cookie就可以達到目的了。所以:cookie不要保存機密信息,讓服務(wù)端來確保用戶信息安全。
使用場景
cookie每次隨HTTP請求一起發(fā)送,浪費寬帶,移動端推薦使用localStorage。
關(guān)于cookie的編碼
原來的cookie編碼大多使用escape和unescape進行編解碼,這個編解碼針對普通字母和數(shù)字以及*,+,-,.,/,@,_以外的其他字符,可以說是比較簡單粗暴的。后來ECMAScript v3(即ES3)已從標準中刪除了escape進行編碼,分解成了encodeURI(針對URL風(fēng)格進行編碼)和 encodeURIComponent(針對URL風(fēng)格編碼加上URI 組件的標點符號進行編碼,比encodeURI要編碼的字符更多)。一般來說cookie編碼只需要能對"="和";"進行編碼即可。
所以在不能使用escape的情況下使用encodeURIComponent編碼,decodeURIComponent解碼。
生命周期
如果不設(shè)置過期時間,那么cookie存儲在內(nèi)存里,如果通過cookie.setMaxAge(num)設(shè)置了過期時間,那么瀏覽器就會把cookie保存到硬盤上,關(guān)閉后再次打開瀏覽器,這些cookie依然有效直到超過設(shè)定的過期時間。存儲在硬盤上的cookie可以在不同的瀏覽器進程間共享,比如兩個IE窗口。而對于保存在內(nèi)存的cookie,不同的瀏覽器有不同的處理方式;
cookie.setmaxage設(shè)置為0時,會馬上在瀏覽器上刪除指定的cookie,
cookie.setmaxage設(shè)置為-1時,代表關(guān)閉當(dāng)前瀏覽器即失效。