とあるエンジニアの闇歴史帳

コピペで使える便利Wiki ※現在構築中です。

ユーザ用ツール


perl:cgi_cookie_get

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

perl:cgi_cookie_get [2017/12/14 20:18]
perl:cgi_cookie_get [2020/06/23 14:10] (現在)
行 1: 行 1:
 +====== Cookieの値を取得する(CGI::Cookie) - Perl ======
 +~~socialite~~
 +<note important>この記事は2006年10月17日に書かれたものです。</note>
 +
 +すでに書き込まれた(セットされた)Cookieを取得するにはどうすれば良いだろうか?この機能もCGI::Cookieモジュールが簡単な方法を用意してくれている。
 +
 +===== サンプル =====
 +<code perl>
 +#!/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
 +</code>
 +
 +===== 実行例 =====
 +<code>
 +        値:katsube
 +  賞味期限:
 +  ドメイン:
 +      パス:/
 +</code>
 +
 +使用方法は非常に簡単である。
 +ポイントだけを押さえてシンプルに書くと、以下の3行だけで取得することが出来る。
 +
 +<code perl>
 +use CGI::Cookie;
 +my %cookies = fetch CGI::Cookie;
 +my $value = $cookies{'id1'}->value if(exists $cookies{'id1'});
 +</code>
 +
 +''fetch CGI::Cookie;''でハッシュ(連想配列)にCookieの値を入れる。その後は普通にハッシュを操作すればOK。キーとCookieの名前が同じになっている。''keys''や''values''などで取り出すこともできるし、''exists''でCookieが渡されたかどうか確認することも可能。
 +
 +ただ、''$cookies{'key'}''として取り出した値をそのままで使うことは難しいため、「値」「ドメイン」「賞味期限」「パス」などを取得するためのメソッドが用意されている。
 +
 +メソッドを利用する上での注意点は2つ。
 +1つ目は、これらの値は例えば賞味期限などはブラウザが送信しないため取得されない場合がある。その場合は取得することはできない。実際に利用するのは「値」を取得するvalueメソッドだけではないか。
 +
 +2つ目に存在しないCookie名を指定すると、致命的なエラーになってプログラムごと終了してしまうため、必ずexistsで存在を確認をするなどしてからメソッドを呼び出さなければならない。
 +
 +===== 関連書籍 =====
 +{{amazon>jp:4797336803}}
 +<html><p style="clear:both"></p></html>
 +
 +{{amazon>jp:4274068765}}
 +<html><p style="clear:both"></p></html>
 +
 +{{amazon>jp:B00ISP0OM8}}
 +<html><p style="clear:both"></p></html>
 +
 +{{tag>CGI・Perl例文集 Perl CGI Cookie}}
 +~~socialite~~
  

関連ページ