この特集のトップページへ
Chapter 8:プレゼンテーション層の構築

8.2.1 基本的なASPプログラム
●クッキー情報の送受信
 クッキー情報(Cookie)とは,クライアント側のハードディスクに少量のデータを保存する仕組みである。最近では,ユーザーが入力したアカウントを保存し,2回目以降に訪れたときには,保存された情報を使ってアカウントを再入力しなくてもよい仕組みを構築したり,ショッピングサイトではユーザーが買い物カゴに入れた商品の商品番号を保存したりするのによく用いられている。

○クッキーの仕組み
 クッキーの仕組みは,驚くほど簡単である(Fig.8-41)。サーバーは,クライアント側にデータを保存したいときには,次のようなSet-Cookieヘッダを送信する。

Set-Cookie: 名前=;
 expires=日付;
 path=ディレクトリ名;
 domain=DNS名;
 secure

※読みやすいように折り返してあるが実際は1行で表現される

 名前というのは保存するときの名前で,というのはその名前に割り当てる値である。たとえば,“userID=123456”のように指定すると,クライアント側にuserIDという名前の項目に対して123456という値が保存される。なお,値を省略したときには,その項目はクライアント側の保存領域から削除される。また,値は文字列として保存され,英数字しか利用できない。英数字以外を保存したい場合には,URLエンコードした文字列を用いることになる。

 expires以下はオプションであり,省略することができる。expiresには,その情報が無効になる日時を指定する。expiresを省略したときには,Webブラウザが閉ざされるまでの一時的な領域に保存される。pathはクッキー情報を割り当てるディレクトリ名,domainはWebサーバーのDNS名である。省略したときには,それぞれクッキー情報を送信したサーバーのURLに対応する値が使われる。最後のsecureは暗号化通信を指定するものである。secureが指定されている場合は,SSLによる暗号化が有効になっていない限り,クライアントは保持しているクッキー情報をサーバーに対して送信しないことを示す(SSLについては「8.3 IISのセキュリティ」で説明する)。


One Point!pathで指定するディレクトリ名は,大文字と小文字を区別するので注意してほしい。

 Set-Cookieヘッダを受け取ったWebブラウザは,その情報をクライアントの記憶領域(多くの場合はハードディスク)に記録する。Windows 2000環境でInternet Explorerを使っている場合には,デフォルトでC:\Documents and Setting\ユーザー名\Cookiesフォルダに保存される。

 保存された情報は,再び同じWebサイトに接続するときに,クライアントからCookieヘッダを使ってサーバー側に送信される。Cookieヘッダの書式は次のようになる。

Cookie: 名前=; 名前=; 

 名前のペアは,サーバーからSet-Cookieヘッダで送信されたものである。つまりサーバーでは,Cookieヘッダを読み取ることにより,以前にSet-Cookieヘッダで送信した情報が得られるということになる。

 このようにクッキーは,Set-Cookieヘッダでサーバーから送信された情報がクライアントの記憶領域に保存され,再びクライアントが同じWebサイトに接続した場合には,保存されていた情報がCookieヘッダでクライアントからサーバーに送信されるというだけの話で,技術的には何も難しいことはない。

 なお,クッキーの仕様はRFC2109に記載されている。より細かいヘッダ情報の規定については,そちらを参照してほしい。

Fig.8-41 クッキーの仕組み
fig8_41

○ASPでクッキーを使うには
 ASPでクッキーを使うには,2通りの方法がある。1つはヘッダを直接扱う方法,もう1つはクッキーを扱うメソッドを利用する方法である。

  1. ヘッダを直接扱う方法
     先に説明したとおり,クッキーはSet-CookieヘッダとCookieヘッダとで構成されている。そこで,Responseオブジェクトに備わるAddHeaderというメソッドを用い,Set-Cookieヘッダを指定してクッキー情報をサーバー側からクライアント側に送信し,受信するときにはRequest.ServerVariablesコレクションを用いてHTTP_COOKIEの内容を取得することでクッキー情報を利用できる。

  2. Cookieコレクションを使う方法
     ASPでは,ResponseオブジェクトとRequestオブジェクトのそれぞれにCookieコレクションが用意されている。このCookiesコレクションを読み書きすることで,クッキー情報を利用できる。

 どちらの方法を使ってもかまわないが,一般にASPでクッキーを利用する場合には,2.の方法が使われる。なぜなら,1.の方法だとヘッダ情報を各項目ごとにセミコロンで区切って分ける必要があり,文字列操作が煩雑になるためである。そこでここでは,2.の方法についてのみ説明する。

 まずクッキーを設定する場合だが,それにはResponseオブジェクトのCookiesコレクションを用いる。最も手軽にクッキーを設定する書式は,次のとおりである。EMPTY値を指定すると,そのクッキー項目を削除することになる。

<% Response.Cookies("名前") =  %>

 たとえば,次のようにすると,uidという名前のクッキーが作られ,123456という値が割り当てられる。


<% Response.Cookies("uid") = "123456" %>

 これは,次のようなSet-Cookieヘッダをクライアントに送信することに相当する。

Set-Cookie: uid=123456

 Fig.8-41で説明したように,Set-Cookieヘッダを受信したクライアントは,ヘッダに指定された名前を記録領域に保存することになる。

 ところで,Set-Cookieヘッダにはいくつかのオプションを指定できると説明した。たとえば,有効期限を設定するexpire,ドメインを設定するdomainなどである。ASPのResponse.Cookiesコレクションにも,これらのオプションに対応したプロパティが用意されていて,次のように指定する。

Expiresの設定
 “Response.Cookies("名前").Expires = 有効期限”とする。指定しなかった場合,Webブラウザが閉ざされるまでが有効期限になる。
 
Pathの設定
 “Response.Cookies("名前").Path="ディレクトリ名"”と指定する。指定しなかった場合,ASPファイルが格納されている仮想ディレクトリが使われる。ディレクトリ名は,大文字と小文字を区別するので注意したい。
 
Domainの設定
 “Response.Cookies("名前").Domain="サーバーのDNS名"”と指定する。指定しなかった場合,IISのサーバー名が使われる。
 
Secureの設定
 “Response.Cookies("名前").Secure=TrueまたはFalse”と指定する。指定しなかった場合,またはFalseを指定した場合,暗号化通信されていなくてもクッキー情報を送信する。Trueが指定された場合,暗号化されていないときにはクッキー情報をクライアント側からサーバー側に送信しない。

 このほか,ASPではクッキーを階層化してキーを持たせることも可能であるが,その利用法についての説明は割愛する。詳細はIISのオンラインヘルプ(http://localhost/IISHelp/)を参照してほしい。

 送信したクッキー情報を受信するには,RequestオブジェクトのCookiesコレクションを用いる。次のようにすると,保存されたクッキー情報を取得できる。

<%= Request.Cookies("名前") %>
Prev 19/43 Next