HTTP Cookie

HTTP Cookie は、クライアント アプリケーションのシステムに状態情報を格納および取得するメカニズムをサーバーに提供します。 このメカニズムにより、Web ベースのアプリケーションは、選択した項目、ユーザー設定、登録情報、および後で取得できるその他の情報についての情報を格納できるようになります。

Cookie に関連する 2 つのヘッダー (Set-Cookie と Cookie) があります。 Set-Cookie ヘッダーは、HTTP 要求に応答してサーバーによって送信され、ユーザーのシステムで Cookie を作成するために使用されます。 Cookie ヘッダーは、一致するドメインとパスを持つ Cookie がある場合に、サーバーに送信される HTTP 要求と共にクライアント アプリケーションによって格納されます。

Set-Cookie 応答ヘッダーは、次の形式を使用します。

Set-Cookie: <name>=<value>[; <name>=<value>]...
[; expires=<date>][; domain=<domain_name>]
[; path=<some_path>][; secure][; httponly]

パターン name=value に続く 1 つ以上の文字列シーケンス (セミコロンで区切られる) を Set-Cookie 応答ヘッダーに格納する必要があります。 サーバーは、これらの文字列シーケンスを使用して、クライアントのシステムにデータを格納できます。

有効期限は、expires=date 形式を使用して設定します。ここで、date はグリニッジ標準時 (GMT) で表される有効期限です。 有効期限が設定されていない場合、Cookie はインターネット セッションが終了すると期限切れになります。 それ以外の場合、Cookie は有効期限までキャッシュに保持されます。 有効期限には次の形式を使用する必要があります。

DAY, DD-MMM-YYYY HH:MM:SS GMT

DAY

曜日 (Sun、Mon、Tue、Wed、Thu、Fri、Sat)。

DD

日付 (月の最初の日は 01 など)。

MMM

月を表す 3 文字の略語 (Jan、Feb、Mar、Apr、May、Jun、Jul、Aug、Sep、Oct、Nov、Dec)。

YYYY

年。

HH

時間を表す 24 時間表示での値 (たとえば、22 は午後 10 時になります)。

MM

分を表す値。

SS

2 番目の値。

パターン domain=domain_name を使用したドメイン名の指定は、永続的な Cookie では省略可能であり、Cookie が有効なドメインの末尾を示すために使用されます。 ドメインを指定するセッション Cookie は拒否されます。 指定したドメイン名の末尾が要求と一致する場合、Cookie は Cookie を送信する必要があるかどうかを判断するためにパスの照合を試みます。 たとえば、ドメイン名の末尾が .microsoft.com の場合、指定したパターンが要求と一致するかどうかを確認するために、home.microsoft.com への要求と support.microsoft.com への要求がチェックされます。 .com、.edu、co.jp など、広く使用されているドメイン名の末尾に Cookie が設定されないようにするには、ドメイン名に少なくとも 2 つまたは 3 つのピリオドを使用する必要があります。 使用できるドメイン名は、.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: <name>=<value> [;<name>=<value>]...

形式 name=value を使用する 1 つ以上の文字列シーケンスには、Cookie で設定された情報が含まれます。

Cookie の生成

Microsoft Internet Explorer の Cookie を生成する方法には、Microsoft JScript の使用、WinINet 関数の使用、CGI スクリプトの使用の 3 つがあります。 すべての生成方法では、Set-Cookie ヘッダーに格納される情報を設定する必要があります。

次の例に示すように、動的 HTML (DHTML) オブジェクト モデルを使用して、ドキュメント オブジェクトの cookie プロパティを呼び出すと Cookie を設定できます。

<SCRIPT language="JavaScript">
<!--
    document.cookie = "SomeValueName = Some_Value";
-->
</SCRIPT>

Cookie は、InternetSetCookie 関数を使用してアプリケーションで作成できます。 詳細については、「Cookie の設定」を参照してください。

Cookie は、要求への HTTP 応答に含まれる CGI スクリプトの一部として Set-Cookie ヘッダーを格納すると生成されます。

次の例は、Perl を使用した Set-Cookie ヘッダーを含む CGI スクリプトです。

print "Set-Cookie:Test=test_value; 
      expires=Sat, 01-Jan-2000 00:00:00 GMT;
      path=/;"

Note

WinINet では、サーバーの実装はサポートされていません。 また、サービスから使用しないでください。 サーバーの実装またはサービスには、Microsoft Windows HTTP サービス (WinHTTP)を使用します。