重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

print "Content-type: text/html\n\n";

#クッキーがないときの動作。
#クッキーがない場合クッキーを期限1日で発行する。
if(!$ENV{'HTTP_COOKIE'}){
#クッキーが存在する場合の動作

print "クッキーないない<br>\n";

#1時間先のグリニッジ標準時を取得し、weeksとmonthsを定義
($gmSec, $gmMin, $gmHour, $gmMDay, $gmMon, $gmYear, $gmWDay, $gmYDay, $gmIsDst) = gmtime(time + (3600 * 24));
$gmYear += 1900;
@weeks = ('Sun', 'Mon', 'Tue', 'Web', 'Thu', 'Fri', 'Sat');
@months = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');

#クッキーの有効期限をその日の1日後までにする
$limitTime = sprintf("%s\n, %02d-%s-%04d %02d:%02d:%02d GMT",$weeks[$gmWDay], $gmMDay, $months[$gmMon], $gmYear, $gmHour, $gmMin, $gmSec);

#クッキー発行
print "Set-Cookie: myBool=1; expires=$limitTime\n";
print "\n";
} else {
#クッキーがあった場合の動作。クッキーありと表示するだけ。
print "クッキーあり。";
}

クッキーの発行を見ると
print "Set-Cookie: なんたらかんたら";
らしいのですが、printでこう書くだけでクッキーが発行できたことになるのですか?

実行しても、ただ単に例えば
Set-Cookie: myBool=1; expires=Mon , 08-Aug-2005 12:11:43 GMT
というようになるだけです。
初心者でまだ1度もクッキー作成成功してないのですが何がいけないのでしょうか。

A 回答 (1件)

とりあえず気づいた問題は


print "Content-type: text/html\n\n";
の、後にcookieの発行をしていることです。

cookieはhttpヘッダに乗せてブラウザに送信する必要がありますが
print "Content-type: text/html\n\n";
この行の最後の\nでヘッダの終わりを示してしまっているのでprint Set-Cookie:・・・はヘッダの一部ではなく、内容と解釈されてしまいブラウザは表示してしまうのです。
以下のように書いたような状態になってしまっています。
print <<HTM
Set-Cookie: myBool=1; expires=Mon , 08-Aug-2005 12:11:43 GMT
<html>
<head>



対処としては
print "Content-type: text/html\n";
#cookie発行
print "\n";#ヘッダの終わり
#htmlのprint

とするか、
print "Content-type: text/html\n";
この行をcookie発行処理の後ろにまわす必要があります。

今まではhttpヘッダ(参考URL)を意識せずにまじないのように
print "Content-type: text/html\n";
を書いていたかもしれませんが、CGIを扱う以上はこれを意識したほうがベターです。
参考URLも読んでみてください。

参考URL:http://www.rfs.jp/sitebuilder/perl/03/03.html,ht …
    • good
    • 0
この回答へのお礼

まじないのように書いてました・・。
今までは
print "Content-type: text/html\n";

<meta http-equiv="Content-type" content="text/html">
に対応しているということも知りませんでした・・。
しかも
print "\n";(\nが2連続)でmeta記述を終わりHTML記述になることも知りませんでした。

Perlの入門サイトでここの説明省略してるところ多sg!!

おかげさまでこれからはきちんとした考え方でPerlスクリプト組めそうです。

ありがとうございました。

お礼日時:2005/08/08 08:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!