« [Cookie] 削除する (Perl, CGI::Cookie) | メイン | ファイル名、拡張子を取得する (Perl, File::Basename) »

カテゴリー:Cookie 

[Cookie] 値を取得する (Perl, CGI::Cookie)

このエントリーを含むはてなブックマーク  livedoorクリップ  [Cookie] 値を取得する (Perl, CGI::Cookie)をdel.icio.usに追加  [Cookie] 値を取得する (Perl, CGI::Cookie)をYahoo!ブックマークに追加  [Cookie] 値を取得する (Perl, CGI::Cookie)をニフティクリップに追加

すでに書き込まれた(セットされた)Cookieを取得するにはどうすれば良いだろうか?この機能もCGI::Cookieモジュールが簡単な方法を用意してくれている。

#!/usr/bin/perl

;#
;#Cookieを取得する
;#

use CGI::Cookie;

#-- 全Cookieを取得 --#
my %cookies = fetch CGI::Cookie;

#-- Cookieの値を取得 --#
if(exists $cookies{'id1'}){
  $value   = $cookies{'id1'}->value;   #値
  $expires = $cookies{'id1'}->expires; #賞味期限
  $domain  = $cookies{'id1'}->domain;  #有効なドメイン
  $path    = $cookies{'id1'}->path;    #有効なパス
}

#-- 表示 --#
$|=1;
print "Content-type: text/plain\n\n";
print <<"END_OF_TXT";
        値:$value
  賞味期限:$expires
  ドメイン:$domain
      パス:$path
END_OF_TXT

○実行結果

        値:katsube
  賞味期限:
  ドメイン:
      パス:/

使用方法は非常に簡単である。
ポイントだけを押さえてシンプルに書くと、以下の3行だけで取得することが出来る。

use CGI::Cookie;
my %cookies = fetch CGI::Cookie;
my $value = $cookies{'id1'}->value if(exists $cookies{'id1'});

fetch CGI::Cookie;でハッシュ(連想配列)にCookieの値を入れる。その後は普通にハッシュを操作すればOK。キーとCookieの名前が同じになっている。keysvaluesなどで取り出すこともできるし、existsでCookieが渡されたかどうか確認することも可能。

ただ、$cookies{'key'}として取り出した値をそのままで使うことは難しいため、「値」「ドメイン」「賞味期限」「パス」などを取得するためのメソッドが用意されている。

メソッドを利用する上での注意点は2つ。
1つ目は、これらの値は例えば賞味期限などはブラウザが送信しないため取得されない場合がある。その場合は取得することはできない。実際に利用するのは「値」を取得するvalueメソッドだけではないか。

2つ目に存在しないCookie名を指定すると、致命的なエラーになってプログラムごと終了してしまうため、必ずexistsで存在を確認をするなどしてからメソッドを呼び出さなければならない。




トラックバック

このエントリーのトラックバックURL:
http://katsubemakito.net/mt/mt-tb.cgi/392






クリエイティブ・コモンズ・ライセンス
このブログは、次のライセンスで保護されています。 クリエイティブ・コモンズ・ライセンス.