1. 程式人生 > >Http中Set-Cookie

Http中Set-Cookie

根據Netscape cookie草案的描述,Cookie 是Web 伺服器向用戶的瀏覽器傳送的一段ASCII碼文字。一旦收到Cookie,瀏覽器會把Cookie的資訊片斷以"名/值"對(name-value pairs)的形式儲存儲存在本地。這以後,每當向同一個Web 伺服器請求一個新的文件時,Web 瀏覽器都會發送之站點以前儲存在本地的Cookie。建立Cookie的最初目的是想讓Web伺服器能夠通過多個HTTP請求追蹤客戶。有些複雜的網路應用需要在不同的網頁之間保持一致,它們需要這種會話狀態的保持能力。
瀏覽器與Web伺服器通過HTTP協議進行通訊,而Cookie就是儲存在HTTP協議的請求或者應答頭部(在HTTP協議中,資料包括兩部分,一部分是頭部,由一些名值對構成,用來描述要被傳輸資料的一些資訊。一部分是主體(body),是真正的資料(如HTML頁面等))進行傳送的。
在HTML文件被髮送之前,Web伺服器通過傳送HTTP 包頭中的Set-Cookie 訊息把一個cookie 傳送到使用者的瀏覽器中。下面是一個遵循Netscape cookie草案的完整的Set-Cookie 頭:

Set-Cookie:customer=huangxp; path=/foo; domain=.ibm.com; 
expires= Wednesday, 19-OCT-05 23:12:40 GMT; [secure]

Set-Cookie的每個屬性解釋如下:
Customer=huangxp 一個"名稱=值"對,把名稱customer設定為值"huangxp",這個屬性在Cookie中必須有。 
path=/foo 控制哪些訪問能夠觸發cookie 的傳送。如果沒有指定path,cookie 會在所有對此站點的HTTP 傳送時傳送。如果path=/directory,只有訪問/directory 下面的網頁時,cookie才被髮送。在這個例子中,使用者在訪問目錄/foo下的內容時,瀏覽器將傳送此cookie。如果指定了path,但是path與當前訪問的url不符,則此cookie將被忽略。 
domain=.ibm.com 指定cookie被髮送到哪臺計算機上。正常情況下,cookie只被送回最初向用戶傳送cookie 的計算機。在這個例子中,cookie 會被髮送到任何在.ibm.com域中的主機。如果domain 被設為空,domain 就被設定為和提供cookie 的Web 伺服器相同。如果domain不為空,並且它的值又和提供cookie的Web伺服器域名不符,這個Cookie將被忽略。 
expires= Wednesday, 19-OCT-05 23:12:40 GMT 指定cookie 失效的時間。如果沒有指定失效時間,這個cookie 就不會被寫入計算機的硬碟上,並且只持續到這次會話結束。 
secure 如果secure 這個詞被作為Set-Cookie 頭的一部分,那麼cookie 只能通過安全通道傳輸(目前即SSL通道)。否則,瀏覽器將忽略此Cookie。 
一旦瀏覽器接收了cookie,這個cookie和對遠端Web伺服器的連續請求將一起被瀏覽器傳送。例如 前一個cookie 被存入瀏覽器並且瀏覽器試圖請求 URL http://www.ibm.com/foo/index.html 時,下面的HTTP 包頭就被髮送到遠端的Web伺服器。
GET /foo/index.html HTTP/1.0
Cookie:customer=huangxp