作者: Penelotty
日時: 2002/6/5(11:47)
こんにちわ,
Penelottyです♪

スクリプトを動かして,どうにか喜びを感じられる程度に辿り着きました.
主にCGIを作っているのですが,そのPeneにどうしても破られない壁があります,
それはクッキーです.

以前にも相談にのっていただいたのですが,まだ解決できていません.
そこで掟破りになるのかもしれませんが,スクリプトを掲載しますので,ぜひ添削を願いないのですが….

スクリプトの意図するところは,ブラウザにメッセージをだすことです,
でも一度アクセスするとその日は同じメッセージをだすようにしたいのですが.

コーディング上は問題ないはずだと思います.
ぜひご助力願います.

---* Penelotty *---

#!/usr/local/bin/perl
#
$jcodelib='jcode.pl';
#
$kanjicode='sjis';
#
$modifier='chirumiru';
#
$htmlfile='default.html';
#
$omikujifile='otsuge.txt';
#
$changetag='<otsuge>';
#
$delimiter='----';
#
$COOKIENAME='OTSUGE';
#

require "$jcodelib";

&get_cookie;
$today=&get_today;

open(OMIKUJI, "$omikujifile");
@omikuji=<OMIKUJI>;
close(OMIKUJI);

$title=shift(@omikuji);
chomp($title);
$str=join('', @omikuji);
@otsuge=split(/$delimiter/, $str);

if ($today ne $c_date) {
	srand(time | $$);
	$index=int(rand(@otsuge));
}
else {
	$index=$c_index;
}

$change="<center><b><u><font size=4 color=#8025da face=DFPPOP体>$title</font></u></b></center><center><b><font size=4 color=#8025da>↓</font></b></center><center><b><font color=#ffffec size=3>$otsuge[$index]</font></b></center>";

print "Content-type: text/html\n";
open(OUT, "$htmlfile");
@html=<OUT>;
foreach (@html) {
	s/$changetag/$change/gi;
	print $_;
}
close(OUT);

&set_cookie;
print "\n";



sub get_cookie {
	@pairs=$ENV{'HTTP_COOKIE'};
	foreach $pair (@pairs) {
		($name, $value)=split(/=/, $pairs);
		$DUMMY{$name}=$value;
	}

	$pairs=$DUMMY{'otsuge'};
	foreach $pair (@pairs) {
		($name, $value)=split(/,/, $pair);
		$COOKIE{$name}=$value;
	}
	$c_date=$COOKIE{'date'};
	$c_index=$COOKIE{'index'};
}

sub set_cookie {
	($sec, $min, $hour, $day, $mon, $year, $week)=gmtime(time+365*24*60*60);

	if ($sec<10)  { $sec="0$sec"; }
	if ($min<10)  { $min="0$min"; }
	if ($hour<10) { $hour="0$hour"; }
	if ($day<10)  { $day="0$day"; }

	$year+=1900;

	$month=('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Oct', 'Nov', 'Dec')[$mon];
	$weeky=('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat')[$week];

	$date_gmt="$weeky, $day-$month-$year $hour:$min:$sec GMT";
	$cook="date:$today,index:$index";
	print "Set-Cookie: $COOKIENAME=$cook; expires=$date_gmt\n"
}

sub get_today {
	($sec, $min, $hour, $day, $mon, $year)=localtime(time);
	$year+=1900;
	$mon++;

	return "$year-$mon-$day";
}