情報システム科
Cookie
目次
Cookie とは
Cookie とはブラウザを通じてユーザのコンピュータに一時的にデータを保存し、必要なときにそのデータを呼び出すことができます。これにより。サーバ側は相手が誰かをあらかじめ知っておく必要がなくなり、必要なときにCookie情報を利用してユーザ認証を行えます。
Set-Cookie 構文
print "Set-Cookie: 〜\n";
print "\n";
print "Content-type: text/html\n";
〜の部分には次のような文字列を指定します。
名前=値; expires=値; domain=値; path=値; secure
CGI プログラムからCookieを送信する場合は、HTTPレスポンスヘッダとして送ることになります。実際的な作業としては、HTTPレスポンスヘッダを出力する際に、 Set-Cookie ヘッダを含めてCookie 情報をクライアントに送信します。Set-Cookie ヘッダは1回のレスポンスヘッダに複数使うことができます。
Set-Cookie レスポンスヘッダの構文
Set-Cookie: 名前=値;
expires=日付;
path=パス;
domain=ドメイン名;
secure
Set-Cookie ヘッダはコンマで区切られ、一つ以上のCookie属性を含みます。それぞれの Cookie 属性はセミコロン( ; )で区切られます。「名前」属性は Cookie 属性の先頭に配置する必要がありますが、その他の属性は順番は関係ありません。
Cookie 属性の詳細
名前=値 必須属性。セミコロン( ; )、カンマ( , )、スペース( )や日本語を使用する際には、それぞれをエンコードする必要があります。
domain=ドメイン名 domain 属性にはCookieを発行するドメイン名を指定します。
[例1] domain=domain.com
省略した場合はウェブサーバの「ホスト名.ドメイン名」になります。
path=パス path 属性はこの Cookie を発行する URL を指定します。
Cookie の値はこのパス名にマッチするすべてのファイルに対して返されます。たとえば「/cgi-bin/A.cgi」で Cookie を発行した場合、pathの指定を省略すると、エクスプローラの場合は「path=/cgi-bin/」、ネットスケープの場合は「path=/cgi-bin」となり、マッチングにより「/cgi-bin/B.cgi」などにまで返されます。
expires=GMT値 必須属性。クライアント側のディスクに記録される Cookie の有効期限を指定します。値は以下のようなフォーマットで指定します。
[書式] Wdy, DD-Mon-YY HH:MM:SS GMT
[例] Fri, 31-Dec-1999 23:59:59 GMT
過去の値を指定すると Cookie 情報が削除されます。
この項目を省略した場合、クライアント側のキャッシュに限定して記録され、セッション終了時に削除されます。
secure secure 属性を記述しておくと、Cookie データが暗号化されて送信されます。サーバーとの接続がセキュアである時のみ有効で、通常は省略されます。
Cookie の書き込み
Cookie を発行させるには次のように出力します。
Cookie の値を書き込む
print "Set-Cookie:NAME=PERRY; "
print "expires=San, 31-Dec-2003 21:50:54 GMT; ";
print "domain=domain.com; ";
print "path=/cgi-bin; ";
print "secure\n";
print "Content-type: text/html", "\n";
上記では、NAMEというラベルに"PERRY"という値を記録しています。「domain.com/cgi-bin」以下にあるファイルであれば、この記録を呼び出すことができます。この記録は、ユーザが削除しない限り2003年12月31日まで記録されています。
Cookie の値を書き込む
cgiの内容
#!/usr/local/bin/perl
print "Set-Cookie: NO=1; ";
print "expires=Thu,31-Dec-2009 01:00:00 GMT; ";
print "path=/cgi-bin; ";
print "\n";
print "Content-type: text/html\n\n";
Cookie の削除
Cookie の削除用のフォーマットというのはありません。Cookie を削除する場合は、有効期限の項目(expires)を過去の時間にします。
Cookie の値を削除
print "Set-Cookie: ", "NAME=PERRY; "
print "expires=", Thu, 01-Jan-1970 00:00:00 GMT;";
print "domain=", "domain.com; ";
print "path=", "/cgi-bin; ";
print "secure", "\n";
print "Content-type: text/html", "\n\n";
Cookie の削除 |
cgiの内容#!/usr/local/bin/perl
print "Set-Cookie: NO=1; ";
print "expires=Sun,31-Dec-2000 01:00:00 GMT; ";
print "path=/cgi-bin; ";
print "\n";
print "Content-type: text/html\n\n";
Cookie の読み込み
Cookieの値を読み込むには環境変数 HTTP_COOKIE を参照します。
Cookie の値を読み込む
print "$ENV{'HTTP_COOKIE'}\n";
Cookie の値を読み込む |
cgiの内容
#!/usr/local/bin/perl
print "Content-type: text/html\n\n";
print "<html>\n<body><br><br><br><br>\n";
print "HTTP_COOKIE: $ENV{'HTTP_COOKIE'}\n";
print "<br><br><br><br></body>\n</html>\n";
Cookie の更新
cookieを読み込んで、その値に、1プラスして書き込む
Cookie の更新 |
cgiの内容
エンコードとデコード
Cookieの値として日本語を直接使うことはできません。特殊記号や日本語文字を記録する場合は、その値をエンコードし、読み込むときはデコードします。
ホームへ
|