CGI-BBS > CGI > Perl > クッキにーついて


カレッヂ
カレッヂ


質問者 BlueLaboratory  投稿日 3/13(火) 19:22:28
下記の用に取得したらいつも
&BleuLaboratory=10*1&BleuLaboratory=10*1
と出ます。
ちなみにOSはWin2000です。
パソコンに入ってるクッキーのファイル全て消してもまだ、表示されるんです…
なぜ?

$b_cookie = $ENV{'HTTP_COOKIE'};
質問者 BlueLaboratory  [削除]  投稿日 3/13(火) 19:41:43
それと
クッキーの削除のスクリプトもうまくいかないのですが、下記は間違ってますかね?

@youbi = ("Sun","Mon","Tue","Wed","Thr","Fri","Sat");
@mons = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
($sec,$min,$hour,$day,$mon,$year,$wday,$yday,$isdst) = localtime(time-1);
$out_cookie = sprintf("%s, %02d\-%s\-%04d %02d:%02d:%02d GMT",$youbi[$wday],$day,$mons[$mon],$year+1900,$hour,$min,$sec);
print "Content-Type: text/html\n";
print "Set-Cookie: name=dami; expires=$out_cookie\n\n";
回答者 まさ  [削除]  投稿日 3/13(火) 21:33:58
Windows2000は入るユーザーによってCookieが格納さてれいるフォルダーが違いますが、
ちゃんと自分の場所のCookieを削除していますか?

質問者 BlueLaboratory  [削除]  投稿日 3/13(火) 22:53:47
原因はクッキーのフォルダじゃなくて、Content.IE5とかいうフォルダに入ってました(^_^;)

今クッキーを削除するスクリプトをCGI(Perl)で作ってるんですが、うまく動作しないんです…
なんでだろう…(T_T)
下記がその問題のスクリプトです。

@youbi = ("Sun","Mon","Tue","Wed","Thr","Fri","Sat");
@mons = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
($sec,$min,$hour,$day,$mon,$year,$wday,$yday,$isdst) = localtime(time-1);$year += 1900;
$out_cookie = "@youbi[$wday], $day-@mons[$mon]-$year $hour:$min:$sec GMT";
  print "Content-Type: text/html\n";
  print "Set-Cookie: name=dami; expires=$out_cookie\n\n";
回答者 まさ  [削除]  投稿日 3/14(水) 19:56:55
>(略)
>print "Content-Type: text/html\n";

このヘッダーがあってはCookieはセットされません。
これでは画面に出力されてしまいます。
これを取りましょう。

質問者 BlueLaboratory  [削除]  投稿日 3/14(水) 20:00:37
この後にprintでHTMLを出してるのですが、
print "Content-Type: text/html\n";
を取ってしまったらそれはもちろん表示されませんよね?

その場合どうしたら良いのでしょうか?
print "Content-Type: text/html\n";
print "Set-Cookie: name=dami; expires=$out_cookie\n\n";
ではなくて
print "Set-Cookie: name=dami; expires=$out_cookie\n";
print "Content-Type: text/html\n\n";
とすれば良いのでしょうか?

また、ブラウザを閉じる前に消去したい場合は現在のようにtime-1で取得した日時をexpriesで指定したらいいのでしょうか?
回答者 まさ  [削除]  投稿日 3/14(水) 20:07:21
>その場合どうしたら良いのでしょうか?
>print "Content-Type: text/html\n";
>print "Set-Cookie: name=dami; expires=$out_cookie\n\n";
>ではなくて
>print "Set-Cookie: name=dami; expires=$out_cookie\n";
>print "Content-Type: text/html\n\n";
>とすれば良いのでしょうか?

そうです。
とにかくCookieはヘッダーの前にセットしなければいけません。

>また、ブラウザを閉じる前に消去したい場合は現在のようにtime-1で取得した日時を
>expriesで指定したらいいのでしょうか?

ブラウザーを閉じる前にCookieを消去することはできません。
ブラウザーを閉じる時なら以下で出来ます。

print "Set-Cookie: name=dami;\n";

expiresを取れば、そのCookieはブラウザーが開いている時だけ有効です。

質問者 BlueLaboratory  [削除]  投稿日 3/14(水) 23:13:40
前に持って来ても着せないのですが…
本もクッキーの方がContent-Type: text/htmlより後になってる…

Content-Type: text/htmlの事をヘッダーと言うのでしょうか?
\n\nまでの事をヘッダーと言うのだと思ってました。
回答者 まさ  [削除]  投稿日 3/15(木) 08:56:09
そうです。\n\nまでがヘッダーです。

>print "Content-Type: text/html\n";
>print "Set-Cookie: name=dami; expires=$out_cookie\n\n";

これよく見ると最初は\nとひとつしかないのでヘッダーは終了していませんね。次の行に
\n\nとありますね。これはSet-Cookieの終わりとヘッダーの終わりを表してますね。
しかしこんなややこしい書き方をしてはいけません。間違いではないですが、ややこしい書き方
はバグの元です。わたしとしては

print "Set-Cookie: name=dami; expires=$out_cookie\n";
print "Content-Type: text/html\n\n";

こちらの書き方の方が良いと思います。しかしこれは個人の好みもあって、一概にどちらがいいと
は言いにくいですが。

しかしいづれにしてもこれでCookieは設定されますけどね。他にはどこも問題はないですからね。
Cookieを受け付けないと言う風に設定しているわけではないですよね。

質問者 BlueLaboratory  [削除]  投稿日 3/15(木) 11:35:22
登録は出来るのですが、削除ができないんです(T_T)
回答者 しあわせのツボ  [削除]  投稿日 3/15(木) 12:17:25
サーバから直接「削除」する方法はないと思います。
同じ名前で中身のないクッキーを発行することで上書きし、見かけ上消すのが一般的です。
その空クッキーのexpireを記述しないか「今」にしておけば、ブラウザを終了させた時にその空クッキーが破棄されます。
質問者 BlueLaboratory  [削除]  投稿日 3/15(木) 14:29:48
全て理解し、無事解決いたしました。
ほんとうにありがとうございましたm(__)m

問題はしあわせのツボさんのおっしゃる通りnameの違いが原因でした。

このページは終了したので返信(回答)は書きこめません

Web裏技