天天看點

淺談浏覽器cookie

由于HTTP協定是無狀态的,無狀态是指協定對于事務處理沒有記憶能力。缺少狀态意味着如果後續處理需要前面的資訊,則它必須重傳,這樣可能導緻每次連接配接傳送的資料量增大。

此時會引用session,比如說登陸成功後,服務端會為使用者開辟一塊記憶體區域,用以存放使用者這本次會話的一些内容,比如說使用者名之類資訊。那麼就需要一個東西來辨別這個記憶體區域是你的而不是别人的,這就是jsessionid。

然後,伺服器響應時會将這個jsessionid發回給你的浏覽器,放入你的浏覽器的cookie中(這個cookies是記憶體cookies,跟一般的不一樣,它會随着浏覽器的關閉而消失)。

之後,隻有你浏覽器沒有關閉,你每向伺服器發請求,伺服器就會從你發送過來的cookies中拿出這個session id,然後根據這個session id從記憶體中取出你之前存放的資料。

但是,如果你退出登陸了,伺服器會清掉屬于你的記憶體區域,是以你再登的話,會産生一個新的session了。

各浏覽器對cookie也有不同的限制:

IE6.0 IE7.0/8.0 Opera FF Safari Chrome
cookie個數: 每個域為20個 每個域為50個 每個域為30個 每個域為50個 沒有個數限制 每個域為53個
cookie總大小: 4095個位元組 4095個位元組 4096個位元組 4097個位元組 4097個位元組 4097個位元組

當cookie超過限額時,浏覽器一般會使用"LRU",最近最少使用原則,删除老的cookie。這樣操作對程式本身是有很大影響的,比如擷取不到需要的cookie字段,可能會引發一些意想不到的結果,比如使用者通路登陸後,通路某個頁面,會提示使用者沒有登陸,需重新登陸 等等。

是以,在使用cookie時,需要按嚴格的标準,和父域名、子域名之間要統一,盡量保證cookie的個數不超過20個,cookie的總大小不逾時4KB。

目前檢視cookie的工具有很多:

如 HttpWatch,fiddle,firebugs,tamper 以及chrome自帶的插件 等

當然極力推薦 的還是FireCookie,是Firefox的一個插件,可以為Firebug添加Cookie的檢視和管理功能

1. 如果某個網站的cookie較多,可以直接利用Firebug的搜尋功能對cookie清單進行篩選,這個功能是從左到右完全比對的,不比對的結果将被隐藏 起來,隻顯示那些符合條件的結果。

2. 在Cookie清單視圖狀态下,有一些工具欄按鈕可以執行一些特殊的操作,比如建立Cookie,删除目前網站的所有Cookie,以及設定網頁使用Cookie的權限 等。權限标簽按鈕顯示的是目前網頁的權限狀态:預設、禁止、允許線程Cookie、允許所有Cookie,除了顯示狀态,點選這個标簽還可以直接修改。而且支援實時更新。

3. 如果你想知道cookie的值是什麼時候發生變化的,可以直接使用Firebug的Console功能,Firecookie會在cookie的建立、修改、删除和被禁用的時候,向Console裡寫日志,如果嫌這個功能多餘,可以在選擇菜單中禁用。清單中的cookie是可以直接修改的,直接右鍵點選cookie,選擇edit項就可以。

4. Firecookie支援剪貼闆功能,可以對cookie進行複制、粘貼和剪切操作。如果把一個cookie項複制,并粘貼到記事本中,得到的結果是一個cookie指派語句,左邊是cookie名稱,右邊是cookie的值清單,包含domain域和path路徑等項目。

繼續閱讀