我一直在為我接下來的一本書做一些關于cookie的研究,在這個過程中我碰到了一些關于瀏覽器處理cookie的有意思的事情。我從尋找瀏覽器允許每個域保存的cookie個數開始。這個結果很有趣:
微軟表示,Internet Explorer 8增加了每個域可以保存的cookie個數至50個,不過我發現IE7也允許每個域保存50個cookie。當然,這可能是因為一個系統補丁增加的,而不是這個瀏覽器版本一開始就是這樣,但是仍然超過了通常認為是20個的限制。
Firefox允許每個域保存50個cookie。 Opera允許每個域保存50個cookie。
Safari/WebKit是這其中最有趣的,因為它似乎沒有明顯的限制,一直到Safari 3.1。我測試了一下設置10,000個cookie,結果它們全部設置成功而且還隨著Cookie頭部一起發送了。不過問題是,頭部的大小超過了限制,導致服務器不能處理,從而發生了錯誤。
因此,我們以前認為的瀏覽器限制每個域的cookie數目為20的觀點不再正確。另一個有趣的不一致現象是:當設置了太多cookie時,瀏覽器有什么反應。出來Safari的異常之外,其它的都設置了上限個數的cookie,這里有兩種方式:
當cookie數量達到限制以后,最近最少使用算法(LRU)自動踢除最老的cookie,以便可以給最新的cookie騰出空間。Internet Explorer和Opera使用這個方式。
Firefox則有些奇怪:它似乎是隨機決定保存cookie,盡管最后一個cookie總是會保存。似乎看不出來它遵循了什么規則。怎么辦?(The takeaway? )在Firefox,中,不要從超過cookie的限制。
不同的瀏覽器之間,cookie的總大小也不盡相同。這一點也比較有一點難以理解,不過這里是我的一些測試結果:
Firefox和Safari允許cookie最長為4097個字符,即cookie的名(name)和值(value)總共可以長達4096個字符,還有一個等號(=)。
Opera則允許cookie最長為4096個字符,包括名(name)、值(value)和等號(=)。
Internet Explorer允許cookie最長為4095個字符,包括名(name)、值(value)和等號(=)。
這里要注意的是,這里的測試都是使用的單字節字符;雙字節字符長度將會自然地記為2。在所有的瀏覽器中,只要長度超過了限制的cookie都將被忽略,并且永遠不會被設置。
在做完這些測試以后,我得出的結論是傳統的對于cookie的限制(大多是從原始的cookie規范中得來的)的理解不再正確。我們在使用cookie時應該非常謹慎,并始終以最低限度使用。
|
新聞熱點
疑難解答