クッキーCGIサンプル

Perl初心者のためのPerlノートです!

HTML/ CSS/ CGI-Perl/ JavaScript/ JavaApplet/ AccessUp/ Internet/ EnglishLearn/ ちゃいちゃん天使/ 天使メッセージ/ 飯田ワールド/ 結城ワールド/ プロフィール/ WEB相談室/ WEBアンテナ/ WEBリーダー/ 燈明日記/ yahoo

◆ はじめに

本ページは、私がPerlを習得した時(いや習得中)のノートです。

ごく普通の言語(COBOL,C,Java,VB等)を知っている人が、Perlをやり始めるといろいろと悩むことがあります。

それは、

です。

本ページは、そのようなハードルを一つ一つクリアにしていけたらと思います。

そして、本ページが何かのお役に立てれば幸いです。では、ごゆっくりご覧ください。

尚、ご感想、ご意見、誤字、脱字、間違い等がありましたら遠慮なくPerlノート掲示板へご指摘ください。

◆ サイト最新情報

◆ コンテンツ

■ クッキーCGIサンプル

クッキーは、Webサイトのセッション管理や前回入力値の再入力不要を実現するのに使います。

以下のようなサンプルを作ってみました。URLエンコードデコードにも対応しています。

# セットクッキー:第一引数はクッキー名、第二引数は格納データ、第三引数はクッキー有効期間(日単位)
&SetCookie("CookieName", "aaa:111,bbb:あいう", 1);


# ゲットクッキー:第一引数はクッキー名
my %COOKIE = &GetCookie("CookieName");
print "Content-type: text/html; charset=Shift_JIS", "\n\n";
print <<"EOH";
<html>
<body>
<p>aaa:$COOKIE{"aaa"},bbb:$COOKIE{"bbb"}</a>
</body>
</html>
EOH


sub SetCookie {
    my ($CookieName, $cookies, $daycount) = @_;
    my ($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg) = gmtime(time + $daycount*24*60*60);
    my @week = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
    my @mons = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
    my $date_g = sprintf("%s, %02d\-%s\-%04d %02d:%02d:%02d GMT",
       $week[$wdayg],$mdayg,$mons[$mong],$yearg+1900,$hourg,$ming,$secg);
    $cookies =~ s/([^\w .-~])/'%'.unpack('H2', $1)/eg;  # URLエンコード
    $cookies =~ tr/ /+/;  # URLエンコード
    print "Set-Cookie: $CookieName=$cookies; expires=$date_g\n";
}
sub GetCookie {
    my ($CookieName) = @_;
    my (%DUMMY, %COOKIE, $name, $value);
    my $cookies = $ENV{'HTTP_COOKIE'};
    my @pairs = split(/;/, $cookies);
    foreach my $pairs (@pairs) {
        ($name, $value) = split(/=/, $pairs);
        $name =~ s/ //g;
        $DUMMY{$name} = $value;
    }
    @pairs = split(/,/, $DUMMY{"$CookieName"});
    foreach my $pairs (@pairs) {
        $pairs =~ tr/+/ /; # URLでコード
        $pairs =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('H2', $1)/eg; # URLでコード
        ($name, $value) = split(/:/, $pairs);
        $COOKIE{$name} = $value;
    }
    return %COOKIE;
}

(尚、本サンプルは、KENT-WEBのfantasy.cgiをベースにしています)


プログラムの制限として

クッキーの制限として

参考:http://www.studyinghttp.net/cookies


クッキーの補足として

サンプルでは使っていませんが、path属性とdomain属性を指定すると別サーバーや複数サーバーへクッキーを送信することが出来ます。

逆にこれを指定しない場合は、PCクライアントとCGIサーバー間でのクッキー送受信になります。


URLエンコードの補足として

インターネット初期ではアスキー文字(7bit)が標準で、それ意外は文字化けする可能性があったので、以下のようにエンコードするようになった。

A〜Z a〜z 0〜9 - . _ はそのまま。

半角スペースは + に変換。

その他はすべて % に16進の2桁の文字コード。

たとえば、「あ」0x2422なら %24%22になる。

ちなみに、URLデコードは、URLエンコードしたものから元にもどすこと。

◆ おすすめ Perl本

■ 続・初めてのPerl 改訂版

『初めてのPerl』の次ぎに読むと吉です。

結構いいですが・・・、初心者にはちょっと難しいかもです。

■ 結城浩のPerlクイズ

この本には、ちゃいちゃんパパの小話しが載っています(謎)。

ある程度、Perlを理解している人には、たまらない内容になっています。さすが結城先生だな!

結城浩のPerlクイズ

■ 新版Perl言語プログラミングレッスン入門編

実は、私はまだ読んでいませんが、結城先生の本なので良くないはずがありません。

新版Perl言語プログラミングレッスン入門編

■ CGI&Perlポケットリファレンス (Pocket reference)

この本は、非常に役に立ちます。ちょっと調べるのに最適です。サンプルも説明も的を射ています。

CGI&Perlポケットリファレンス (Pocket reference)

■ Perlベストプラクティス

一読の価値有りだと思います。

Perlベストプラクティス

■ プログラミングPerl〈VOLUME1〉

ご存知、Perl本の聖書、ラクダ本(上)です。

■ プログラミングPerl〈VOLUME2〉

ご存知、Perl本の聖書、ラクダ本(下)です。

◆ おわりに

最後に、本ページが、何かのお役に立てれば幸いです。

尚、ご感想、ご意見、誤字、脱字、間違い等がありましたら遠慮なくPerlノート掲示板へご指摘ください。

HTML/ CSS/ CGI-Perl/ JavaScript/ JavaApplet/ AccessUp/ Internet/ EnglishLearn/ ちゃいちゃん天使/ 天使メッセージ/ 飯田ワールド/ 結城ワールド/ プロフィール/ WEB相談室/ WEBアンテナ/ WEBリーダー/ 燈明日記/ yahoo

人のよいところをどんどん見つけよう