HTTP Cookie
HTTP Cookie 會提供一個機制來儲存和擷取用戶端應用程式系統上的狀態資訊。 此機制可讓 Web 應用程式儲存所選專案、使用者喜好設定、註冊資訊,以及稍後可擷取的其他資訊。
Cookie 相關標頭
Set-Cookie 和 Cookie 有兩個標頭與 Cookie 相關。 Set-Cookie 標頭是由伺服器傳送,以回應 HTTP 要求,用來在用戶的系統上建立 Cookie。 如果有具有相符網域和路徑的 Cookie,則用戶端應用程式會包含傳送至伺服器的 HTTP 要求。
Set-Cookie 標頭
Set-Cookie 回應標頭使用下列格式:
Set-Cookie: <name>=<value>[; <name>=<value>]...
[; expires=<date>][; domain=<domain_name>]
[; path=<some_path>][; secure][; httponly]
遵循模式名稱=值的一或多個字串序列(以分號分隔)必須包含在 Set-Cookie 回應標頭中。 伺服器可以使用這些字串序列,將資料儲存在客戶端的系統上。
到期日是使用 expires=date 格式來設定,其中 date 是格林威治平均時間 (GMT) 中的到期日。 如果未設定到期日,Cookie 會在因特網會話結束之後到期。 否則,Cookie 會保存在快取中,直到到期日為止。 日期必須使用下列格式:
DAY, DD-MMM-YYYY HH:MM:SS GMT
-
DAY
-
一周的一天(太陽,星期一,週二,星期二,星期三,星期五,星期六,星期六)。
-
DD
-
月份的日期(例如當月第一天的 01)。
-
嗯
-
本月的三個字母縮寫(1月、2月、Mar、Apr、May、Jun、Jul、8月、Sep、Oct、Nov、Dec)。
-
YYYY
-
年。
-
HH
-
例如,軍事時間的小時值(例如下午 22:00 為 10:00)。
-
MM
-
分鐘值。
-
SS
-
第二個值。
使用 pattern domain=domain_name 指定功能變數名稱是持續性 Cookie 的選擇性名稱,可用來指出 Cookie 有效之網域的結尾。 指定網域的會話 Cookie 遭到拒絕。 如果指定的域名結尾符合要求,Cookie 會嘗試比對路徑,以判斷是否應該傳送 Cookie。 例如,如果功能變數名稱結尾為 .microsoft.com,則會檢查對 home.microsoft.com 和 support.microsoft.com 的要求,以查看指定的模式是否符合要求。 功能變數名稱中至少必須有兩個或三個句號,以防止針對廣泛使用的域名結尾設定Cookie,例如.com、.edu和 co.jp。 允許的域名類似於 .microsoft.com、.someschool.edu 和 .someserver.co.jp。 只有指定網域內的主機可以設定網域的Cookie。
使用模式 path=some_path設定路徑是選擇性的,可用來指定 Cookie 有效 URL 的子集。 如果指定路徑,則 Cookie 會針對符合該路徑的任何要求視為有效。 例如,如果指定的路徑是 /example,則具有 /examplecode 和 /example/code.htm 路徑的要求會相符。 如果未指定路徑,則會假設路徑是與 Set-Cookie 標頭相關聯的資源路徑。
Cookie 也可以標示為安全,指定只能將 Cookie 傳送至 HTTPs 伺服器。
最後,Cookie 可以標示為 HttpOnly(屬性不區分大小寫),以指出 Cookie 不可編寫腳本,且不應基於安全性考慮向用戶端應用程式顯示。 在 Windows 因特網內,這表示無法透過 InternetGetCookie 函式擷取 Cookie。
Cookie 標頭
Cookie 標頭隨附於任何 HTTP 要求,其網域和路徑符合要求的 Cookie。 Cookie 標頭的格式如下:
Cookie: <name>=<value> [;<name>=<value>]...
一或多個字串序列,使用格式名稱=值,包含Cookie中設定的資訊。
產生 Cookie
有三種方法可以產生 Microsoft Internet Explorer 的 Cookie:使用 Microsoft JScript、使用 WinINet 函式,以及使用 CGI 腳本。 所有方法都需要設定 Set-Cookie 標頭中包含的資訊。
使用 DHTML 物件模型產生 Cookie
使用動態 HTML (DHTML) 物件模型,可以呼叫 檔物件的 cookie 屬性來設定 Cookie ,如下列範例所示。
<SCRIPT language="JavaScript">
<!--
document.cookie = "SomeValueName = Some_Value";
-->
</SCRIPT>
使用 WinInet 函式產生 Cookie
使用 InternetSetCookie 函式的應用程式可以建立 Cookie。 如需詳細資訊,請參閱 設定 Cookie。
使用 CGI 腳本產生 Cookie
Cookie 是藉由將 Set-Cookie 標頭包含在 HTTP 回應中要求之 CGI 腳本的一部分來產生。
下列範例是 CGI 腳本,其中包含使用 Perl 的 Set-Cookie 標頭。
print "Set-Cookie:Test=test_value;
expires=Sat, 01-Jan-2000 00:00:00 GMT;
path=/;"
注意
WinINet 不支援伺服器實作。 此外,不應該從服務使用。 針對伺服器實作或服務,請使用 Microsoft Windows HTTP 服務 (WinHTTP) 。