餅幹機制。正統的cookie分發是通過擴展HTTP協議來實現的,服務器通過在HTTP的響應頭中增加壹行特殊的指令來提示瀏覽器根據指令生成相應的cookie。但是,純客戶端腳本(如JavaScript或VBScript)也可以生成cookie。cookie的使用是由瀏覽器在後臺按照壹定的原則自動發送到服務器的。瀏覽器檢查所有存儲的cookies。如果cookie的範圍大於或等於所請求資源的位置,它將被附加到所請求資源的HTTP請求頭中並發送給服務器。
cookie的內容主要包括:名稱、值、過期時間、路徑和域。路徑和域壹起構成了cookie的作用域。如果未設置過期時間,則意味著該cookie的生存期在瀏覽器會話期間。關閉瀏覽器窗口,cookie就會消失。這種生存期為瀏覽器會話的cookie稱為會話cookie。會話cookie壹般不存儲在硬盤上,而是存儲在內存中。當然,規範中並沒有規定這種行為。如果設置了過期時間,瀏覽器會將cookies保存到硬盤上,關閉後再次打開瀏覽器。這些cookies將保持有效,直到超過過期時間。存儲在硬盤上的Cookie可以在不同的瀏覽器進程之間共享,比如兩個ie窗口。不同的瀏覽器有不同的方式來處理存儲在內存中的cookie。
會話機制。會話機制是壹種服務器端機制,服務器使用類似哈希表的結構(即可能使用哈希表)來保存信息。
當程序需要為客戶機的請求創建會話時,服務器首先檢查客戶機的請求是否已經包含會話標識符(稱為會話id)。如果是,則說明之前已經為該客戶端創建了壹個會話,服務器會根據會話id檢索該會話以供使用(如果檢索不到,則會創建壹個新的)。如果客戶端請求不包含會話id,請為該客戶端創建壹個會話,並生成壹個與該會話相關聯的會話id。session id的值應該是壹個不會重復,也不容易被發現模仿的字符串。該會話id將被返回給客戶端,以便保存在該響應中。
Cookie可以用來保存這個會話id,這樣瀏覽器在交互的時候就可以根據規則自動向服務器播放這個標識符。通常,此cookie的名稱類似於SEEESIONID。但是,cookie可以被人為禁止,所以當cookie被禁止時,必須有其他機制將會話id傳回服務器。
壹種經常使用的技術被稱為URL重寫,即會話id被直接附加到URL路徑上。另壹種技術叫做表單隱藏域。也就是說,服務器將自動修改表單並添加壹個隱藏字段,以便在提交表單時可以將會話id傳遞回服務器。例如:
& ltform name = " test form " action = "/XXX " & gt;
& ltinput type = " hidden " name = " jsessionid " value = " byok3vjfd 75 APN RF 7 C2 HMD NV 6 qzcebzwowibyenlerjq 99 zwpbng!-145788764 " >
& ltinput type="text " >
& lt/form & gt;
事實上,這種技術可以簡單地通過將URL重寫應用於動作來替換。