クッキーについて
以下はperlにcookieが含まれている例です。(長くてすみません)結局、フォームに書き込んだ項目がクッキーによってすぐ表示されるということです。この場合、別のファイルで項目を取得するにはどうすればよいでしょうか。
#! c:/perl/bin/perl
require "jcode.pl";
#============================ ユーザー設定 ====
$CHARSET = 'Shift_JIS'; # 文字コード
$DATAFILE = './board.dat'; # 記事ファイル
中略
$COOKIE_PREFIX = 'simplebbs'; # クッキープリフィクス
$COOKIE_LIFE = 10; # クッキー期限(日)
#======================== メインプログラム ====
loadFormdata();
loadCookie();
# 記事データの読み込み
open(FILE, "<$DATAFILE")
or printErrorPage("記事ファイルが開けません。");
eval{ flock(FILE, 1) };
@DATA = <FILE>;
close(FILE);
if(exists $FORM{'mode'}) {
if($FORM{'mode'} eq 'write') {
writeArticle(); # 書き込みモード
}
中略 # 削除モード
}
# 記事データの書き込み
中略
printPage();
exit;
#========================== 記事ページ出力 ====
sub printPage
{
my $begin = $FORM{'page'} * $PAGEVIEW;
my $end = $begin + $PAGEVIEW;
if($end > @DATA) {
$end = @DATA;
}
printHttpHeader();
print <<END;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head><title>けいじばん</title></head>
<body>
<h1>掲示板</h1>
<form action="$ENV{'SCRIPT_NAME'}" method="POST">
名前:<input type="text"
name="author" size="40" value="$COOKIE{'author'}"><br>
電子メール:<input type="text"
name="email" size="40" value="$COOKIE{'email'}"><br>
題名:<input type="text" name="title" size="60"><br>
内容:<textarea cols="60" rows="5" name="text"></textarea><br>
<input type="hidden" name="mode" value="write">
<input type="submit" value="書き込み">
<input type="reset" value="リセット">
</form>
<hr>
<form action="$ENV{'SCRIPT_NAME'}" method="POST">
END
# 記事の出力
my ($i, $nextpage, $nextlink);
for($i = $begin ; $i < $end ; ++$i) {
中略
}
# 次ページへのリンク
中略
#========================== 記事を書き込む ====
sub writeArticle
{
my @wdy_str = ('日', '月', '火', '水', '木', '金', '土');
my ($sec, $min, $hour, $mday, $mon, $year, $wday)
= localtime(time);
my $date = sprintf("%4d年%02d月%02d日(%s) %02d:%02d",
$year + 1900, ++$mon, $mday, $wdy_str[$wday],
$hour, $min);
unshift @DATA,
中略
$COOKIE{'author'} = $FORM{'author'};
$COOKIE{'email'} = $FORM{'email'};
}
#========================== 記事を削除する ====
中略
#======================== HTTPヘッダー出力 ====
sub printHttpHeader
{
# グリニッジ標準時の文字列
my @mon_str = (
'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
my @wdy_str = (
'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');
my ($sec, $min, $hour, $mday, $mon, $year, $wday)
= gmtime(time + ($COOKIE_LIFE * 24 * 60 * 60));
my $date = sprintf("%s, %02d-%s-%04d %02d:%02d:%02d GMT",
$wdy_str[$wday], $mday, $mon_str[$mon], $year + 1900,
$hour, $min, $sec);
# ヘッダーの出力
my ($name, $value);
print "Content-type: text/html; charset=$CHARSET\n";
foreach $name (keys %COOKIE) {
$value = $COOKIE{$name};
$name = "${COOKIE_PREFIX}_$name";
$value =~ s/(\W)/sprintf("%%%02X", ord($1))/eg;
print "Set-Cookie: $name=$value; expires=$date\n";
}
print "\n";
}
#======================== エラーページ出力 ====
中略
#================== クッキーデータ取り込み ====
sub loadCookie
{
my $pair;
foreach $pair (split(/;\s*/, $ENV{'HTTP_COOKIE'})) {
my ($name, $value) = split(/=/, $pair);
if(not $name =~ /${COOKIE_PREFIX}_(.+)/) {
next;
}
$name = $1;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg;
$COOKIE{$name} = $value;
}
}
#================== フォームデータ取り込み ====
sub loadFormdata
{
my ($query, $pair);
if($ENV{'REQUEST_METHOD'} eq 'POST') {
read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
中略
お礼
あっそうでした!お恥ずかしい。あれでは正反対の意味になっていました。ご指摘どうもありがとうございました。正規表現の知識があやふやなのでうっかりしました。