久々に CGI なプログラムを書こうとしたら、すっかり忘れていたので。
まずは cookie を設定する場合。
#!/usr/bin/perl
use strict;
use warnings;
use CGI;
my $q = new CGI;
# cookie を作成
my $cookie = $q->cookie(-name => "hoge", # cookie名
-value => "fuga", # 値
-expires => "+30d" # 有効期限
);
# cookie を HTTPヘッダにセットして発行
print $q->header(-type => 'text/html',
-charset => 'UTF-8',
-cookie => $cookie
);
# 以下略・・・
有効期限については、整数と時間の単位の組み合わせで指定します。使える時間の単位は、s(秒), m(分), h(時間), d(日), M(月), y(年) が使えます。有効期限を指定しなかった場合は、ブラウザを閉じるまで有効な cookie が発行されます。また整数部分にマイナスの値を指定した場合、cookie は削除されます。
複数の cookie を一度にセットしたい場合は、配列に放り込んでからそのリファレンスを渡せばOKです。
# 複数のcookieを用意して・・・
my $cookie1 = $q->cookie(-name => "hoge",
-value => "hogehoge",
-expires => "+30d"
);
my $cookie2 = $q->cookie(-name => "fuga",
-value => "fugafuga",
-expires => "+1h"
);
# 配列に入れる場合は
my @cookies = ($cookie1, $cookie2);
print $q->header(-type => 'text/html',
-charset => 'UTF-8',
-cookie => \@cookies
);
# 無名配列を使う場合は
print $q->header(-type => 'text/html',
-charset => 'UTF-8',
-cookie => [$cookie1, $cookie2]
);
cookie 作成時のパラメータとしては、他に -dommain (取得可能なドメインの範囲の指定)や -path (取得可能なパスの指定)、-secure (プロトコルによる利用の制限)なんかもありますが、たぶん必要になる事は無いと思うので今回は割愛します(おぃ!)。
最後に、cookie を読み出す場合はこんな感じで。
#!/usr/bin/perl
use strict;
use warnings;
use CGI;
my $q = new CGI;
my $cookie_hoge = $q->cookie('hoge');
# 以下略・・・