一、 中文譯名
Ø Cookie : 小餅乾 ? 偶用盡所有的方法都沒有找到其中文譯名 , 就連偶一直非常信任的金山詞霸對其也只是一段解釋而非譯名。(如果哪位高人能譯出,請一定要告知金山公司讓他們去更新詞庫)
Ø Session :會話
Ø Cache :高速緩衝儲存空間
二、 工作機制
Ø Cookie :採用的是用戶端儲存資訊的方案。
Ø Session :採用伺服器端儲存資訊的方案。
Ø Cache :利用緩衝 SRAM 來“靜態”的儲存寫入資訊的方案。
如果上面的“專業”解釋你還是不能明白,那我們就來“通俗”的解釋它們吧。
1 . Cookie 用戶端的機制就是使用者訪問網站時, Web 服務器發送給該使用者的不僅僅是一個頁面,還有一個包含日期和時間的 Cookie 。使用者的瀏覽器在獲得頁面的同時還得到了這個 Cookie ,並且將它儲存在使用者硬碟上的某個檔案夾中。
Cookie 是一段文本資訊,你可以在你的電腦硬碟中找到許多這種檔案,它們通常存放在 C:/Documents and Settings/ 使用者名稱 /Cookies (早於 Win2000 以前的系統則會存放在 c:/windows/Cookies )。
那麼 Web 服務器通過 Cookie 究竟寫下了些什麼呢。它們用有什麼作用呢。
這些就要看 Web 服務器的 code 如何寫的了,不過你可以不必擔心,伺服器在 Cookie 裡寫下的資訊只是為了你下次訪問該網站時節約時間或提供一些特定的服務(絕非病毒或是其它 可疑滴東東)。而且某些資訊資料是加密的(例如密碼等),當然也可以通過設定瀏覽器讓它不記錄下 Cookie 。
應用舉例:一些要求使用者登入的網站則可以通過 Cookie 來確定您是否已經登入過,這樣您就不必每次都輸入登入資訊;一些網站的投票功能可以簡單地利用 Cookie 作為布爾值,表示您的瀏覽器是否已經參與了投票,從而避免您重複投票。
2 . Session 服務端的機制是將使用者的請求資訊放在伺服器端來儲存資訊,伺服器使用一種類似於散列表的結構來儲存資訊。當程式需要為某個用戶端的請求建立一個 session 的時候,伺服器首先檢查這個用戶端的請求裡是否已包含了一個 session 標識 - 稱為 session id ,如果已包含一個 session id 則說明以前已經為此用戶端建立過 session ,伺服器就按照 session id 把這個 session 檢索出來使用。
儲存這個 session id 的方式可以採用 cookie ,這樣在互動過程中瀏覽器可以自動的按照規則把這個標識發送給伺服器。由於 cookie 可以被人為的禁止,必須有其他 機制以便在 cookie 被禁止時仍然能夠把 session id 傳遞迴伺服器。經常被使用的一種技術 叫做 URL 重寫,就是把 session id 直接附加在 URL 路徑的後面。
這就好像是我們去某些商店去買東西,如果你已是該店的會員,那麼商店會給你一張會員卡,下次你再次光顧這家店時只要出示你的會員卡就可以享受訂製的服務了。
由於 session 只認 id 不認人,因此不同的瀏覽器,不同的視窗開啟檔案以及不同的 cookie 儲存方式都會對它的識別產生影響,這時就容易出現了我們常說的 session 混亂了。
還是以上面會員店為例,如忘帶會員卡或是會員卡上的照片已經是你好幾年前的樣子店員無法辨認,商店會重新給你辦理一張會員卡。而此時其實你已經有兩張會員卡了( session id )正好這兩張卡的服務涵蓋範圍不一樣(一張是普通卡,一張是 VIP 卡),當你再次去商店你任意的給了商店一張卡,這樣你得到的服務有可能根本不是你想要的。
當然如果程式寫的好是可以避免這種混亂的情況,有時還可以是跨應用程式的 session 共用。
3 . Cache “靜態”機制跟比起以上兩種方式就特殊一些。為什麼說它是“靜態”,是因為它是有程式寫入到 SRAM 裡的,除非是重新寫入資料或關閉電源,否則寫入的資料是會保持不變的。
由於 CPU 的存取資料速度比從記憶體和硬碟中存取資料的速度要快得多,從記憶體和硬碟中存取資料時會使 CPU 等待,影響電腦的速度。 SRAM 的存取速度比其它記憶體和硬碟都要快,所以它被用作電腦的快取。
有了快取,可以先把資料預寫到其中,需要時直接從它讀出,這就縮短了 CPU 的等待時間。快取之所以能提高系統的速度是基於一種統計規律,主板上的控制系統會自動統計記憶體中哪些資料會被頻繁的使用,就把這些資料存在快取中, CPU 要訪問這些資料時,就會先到 Cache 中去找,從而提高整體的運行速度。
三、 生命週期區別
Ø Cookie
如果不設定到期時間,則表示這個 cookie 生命週期為瀏覽器會話期間,只要關閉瀏覽器視窗, cookie 就消失了。這種生命期為瀏覽會話期的 cookie 被稱為會話 cookie 。會話 cookie 一般不儲存在硬碟上而是儲存在記憶體裡。
如果設定了到期時間,瀏覽器就會把 cookie 儲存到硬碟上,關閉後再次開啟瀏覽器,這些 cookie 依然有效直到超過設定的到期時間。有些論壇在你登入時有記住登入資訊 1 個月這類的時間選擇,這就是為 Cookie 設定了到期時間。這時我們就算關閉了瀏覽器,再次開啟訪問這個論壇時仍然會是線上狀態不需要再次登入。
Ø Session
和 Cookie 不一樣,使用者關閉瀏覽器 Session 仍然儲存在伺服器端,只要程式發出指令去刪除 session ,伺服器會一直保留這個會話對象直到它處於非使用中超過設定的間隔為止。
我們有時會誤解當使用者關閉瀏覽器時 Session 已經被刪除,是由於大部分 session 機制都使用 cookie 來儲存 session id ,而關閉瀏覽器後這個 session id 就消失了,再次串連到伺服器時也就無法找到原來的 session 。
Ø Cache
由於 Cache 的機制我們很明顯的可以看出,只有關閉電腦電源或是讓程式重寫 Cache 。不然這個 Cache 將會一直存在。