cookie和session都為了用來儲存狀態資訊,都是儲存客戶端狀態的機制,它們都是為了解決http無狀態的問題而所做的努力。
session可以用cookie來實現,也可以用url回寫的機制來實現。用cookie來實現的session可以認為是對cookie更高階的應用。
cookie和session有以下明顯的不同點:
1)cookie將狀態儲存在客戶端,session將狀態儲存在伺服器端;
2)cookies是伺服器在本地機器上儲存的小段文字並隨每乙個請求傳送至同乙個伺服器。cookie最早在rfc2109中實現,後續rfc2965做了增強。網路伺服器用http頭向客戶端傳送cookies,在客戶終端,瀏覽器解析這些cookies並將它們儲存為乙個本地檔案,它會自動將同一伺服器的任何請求縛上這些cookies。session並沒有在http的協議中定義;
3)session是針對每乙個使用者的,變數的值儲存在伺服器上,用乙個sessionid來區分是哪個使用者session變數,這個值是通過使用者的瀏覽器在訪問的時候返回給伺服器,當客戶禁用cookie時,這個值也可能設定為由get來返回給伺服器;
4)就安全性來說:當你訪問乙個使用session 的站點,同時在自己機子上建立乙個cookie,建議在伺服器端的session機制更安全些.因為它不會任意讀取客戶儲存的資訊。
session機制是一種伺服器端的機制,伺服器使用一種類似於雜湊表的結構(也可能就是使用雜湊表)來儲存資訊。
當程式需要為某個客戶端的請求建立乙個session的時候,伺服器首先檢查這個客戶端的請求裡是否已包含了乙個session標識 - 稱為 session id,如果已包含乙個session id則說明以前已經為此客戶端建立過session,伺服器就按照session id把這個 session檢索出來使用(如果檢索不到,可能會新建乙個),如果客戶端請求不包含session id,則為此客戶端建立乙個session並且生成乙個與此session相關聯的session id,session id的值應該是乙個既不會重複,又不容易被找到規律以仿造的字串,這個 session id將被在本次響應中返回給客戶端儲存。
1.2.1 session的實現方式
1使用cookie來實現
伺服器給每個session分配乙個唯一的jsessionid,並通過cookie傳送給客戶端。
當客戶端發起新的請求的時候,將在cookie頭中攜帶這個jsessionid。這樣伺服器能夠找到這個客戶端對應的session。
流程如下圖所示:
2使用url回顯來實現
url回寫是指伺服器在傳送給瀏覽器頁面的所有鏈結中都攜帶jsessionid的引數,這樣客戶端點選任何乙個鏈結都會把jsessionid帶會伺服器。
如果直接在瀏覽器輸入服務端資源的url來請求該資源,那麼session是匹配不到的。
tomcat對session的實現,是一開始同時使用cookie和url回寫機制,如果發現客戶端支援cookie,就繼續使用cookie,停止使用url回寫。如果發現cookie被禁用,就一直使用url回寫。jsp開發處理到session的時候,對頁面中的鏈結記得使用response.encodeurl() 。
1.2.2 與cookie相關的http擴充套件頭
1)cookie:客戶端將伺服器設定的cookie返回到伺服器;
2)set-cookie:伺服器向客戶端設定cookie;
3)cookie2(rfc2965)):客戶端指示伺服器支援cookie的版本;
4)set-cookie2(rfc2965):伺服器向客戶端設定cookie。
1.2.3 cookie的流程
伺服器在響應訊息中用set-cookie頭將cookie的內容回送給客戶端,客戶端在新的請求中將相同的內容攜帶在cookie頭中傳送給伺服器。從而實現會話的保持。
流程如下圖所示:
web快取(cache)位於web伺服器和客戶端之間。
快取會根據請求儲存輸出內容的副本,例如html頁面,,檔案,當下乙個請求來到的時候:如果是相同的url,快取直接使用副本響應訪問請求,而不是向源伺服器再次傳送請求。
http協議定義了相關的訊息頭來使web快取盡可能好的工作。
減少相應延遲:因為請求從快取伺服器(離客戶端更近)而不是源伺服器被相應,這個過程耗時更少,讓web伺服器看上去相應更快。
減少網路頻寬消耗:當副本被重用時會減低客戶端的頻寬消耗;客戶可以節省頻寬費用,控制頻寬的需求的增長並更易於管理。
expires:指示響應內容過期的時間,格林威治時間gmt
cache-control:更細緻的控制快取的內容
last-modified:響應中資源最後一次修改的時間
etag:響應中資源的校驗值,在伺服器上某個時段是唯一標識的。
date:伺服器的時間
if-modified-since:客戶端訪問的該資源最後一次修改的時間,同last-modified。
if-none-match:客戶端訪問的該資源的檢驗值,同etag。
http/1.1中快取的目的是為了在很多情況下減少傳送請求,同時在許多情況下可以不需要傳送完整響應。前者減少了網路迴路的數量;http利用乙個「過期(expiration)」機制來為此目的。後者減少了網路應用的頻寬;http用「驗證(validation)」機制來為此目的。
http定義了3種快取機制:
1)freshness:允許乙個回應訊息可以在源伺服器不被重新檢查,並且可以由伺服器和客戶端來控制。例如,expires回應頭給了乙個文件不可用的時間。cache-control中的max-age標識指明了快取的最長時間;
2)validation:用來檢查以乙個快取的回應是否仍然可用。例如,如果乙個回應有乙個last-modified回應頭,快取能夠使用if-modified-since來判斷是否已改變,以便判斷根據情況傳送請求;
3)invalidation:在另乙個請求通過快取的時候,常常有乙個***。例如,如果乙個url關聯到乙個快取回應,但是其後跟著post、put和delete的請求的話,快取就會過期。
Cookie Session機制詳解
cookie通過在客戶端記錄資訊確定使用者身份,session通過在伺服器端記錄資訊確定使用者身份。cookie機制 理論上,乙個使用者的所有請求操作都應該屬於同乙個會話,而另乙個使用者的請求操作則應該屬於另乙個會話。而web應用程式是使用http協議傳輸資料的。http協議是無狀態的協議,一旦資料...
Cookie session機制詳解
cookie機制 什麼是cookie?cookie是web伺服器儲存在客戶端的一系列文字資訊。cookie的作用 對特定物件的追蹤。統計網頁瀏覽次數。簡化登入。安全效能 容易資訊洩露。cookie不是內建物件 cookie儲存的都是文字資訊 cookie是在客戶端發揮作用 cookie的語法 設定c...
會話技術Cookie Session
1 儲存客戶端的狀態 由乙個問題引出今天的內容,例如 的購物系統,使用者將購買的商品資訊儲存到 因為http協議是無狀態的,也就是說每個客戶訪問伺服器端資源時,伺服器並不知道該客戶端是誰,所以需要會話技術識別客戶端的狀態。會話技術是幫助伺服器記住客戶端狀態 區分客戶端 2 會話技術 從開啟乙個瀏覽器...