Perlコーディング

クッキー発行、クッキー読込

2007年11月21日
クッキーを発行して、認証に使います。

1.ログインが完了でクッキー発行
2.それ以降のページではクッキーを読み込んで、セットされていれば表示、されていなければ表示しない

とします。


まず、クッキー発行。
Cookieの属性は
・名前
 必須。クッキーの名前と値を設定します。
・ドメイン
 クッキーを発行するドメインを指定します。
・パス
 Cookie情報の取得を許可するURLパス情報を指定します。
・有効期限
 クッキーの有効期限を指定します。書式は、Fri, 21-Nov-2007 23:59:59 GMT
 指定しなければ、ブラウザが閉じられるまでが期限になります。
・セキュア接続フラグ
 フラグを立てると、サーバーとの接続がセキュアであるときのみ、クッキーが有効になります。
があります。

構文は
Set-Cookie : 名前=値; expires=日付;path=パス; domain=ドメイン名; secure
です。日本語や【"】、【'】、【;】が含まれる場合はエンコードします。
変数$cookieをエンコードするときは
$cookie =~ s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg;
です。


今回は簡単な認証に使うだけなので、名前のみ指定します。ブラウザを閉じたらセッションを閉じたいので、有効期限も無指定です。

クッキー名:cookie_name
値:cookie_value
をセットします。
Set-Cookie : cookie_name=cookie_value;\n\n

これをヘッダにprint文で書き込みます。\n\nと\nを2つ続けて出力します。Set-Cookieの後ろは空行が必要なようです。

print <<EOT;
Content-type: text/html
print "Set-Cookie : cookie_name=cookie_value;\n\n";
空行
html本体


次は、クッキー取得。
発行したクッキーは$ENV{'HTTP_COOKIE'}で参照できます。各属性は【;】で、名前と値は【=】で区切ることができます。発行時はエンコードしたので、取得時はデコードします。

クッキー取得サブ関数です。$cookie{'クッキー名'}で値が参照できます。
sub getCookie {
 $cookie_name = shift @_;
 foreach (split(/;/, $ENV{'HTTP_COOKIE'})) {
  ($name, $value) = split(/=/);
  $name =~ s/\s//g;
  $value =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg;
  $cookie{$name} = $value;
  return $cookie{$cookie_name};
 }
}

今回セットしたCookieの場合、$cookie{'cookie_name'}にcookie_valueが入っています。


参考になるサイト
Perl講座 -Smart
簡単CGI クッキーを使おう