セットクッキーで最後のデータしかセットされない。

[上に] [前に] [次に]
ユミ [E-Mail] 1999/06/09(水) 09:17:25
セットクッキーでデータをセットすると最後のデータしかセットされません。
どうしてなんでしょうか?
良いアドバイスお願いします。

sekita 1999/06/09(水) 09:21:56
そのソースの関連部分のコピーを載せればすぐにわかるでしょう。
またソースをみないとこには解決できないと思います。

ユミ 1999/06/09(水) 09:25:29
すいません。ソースを載せてなかったですね。
うっかりしてました。
以下がソースです。よろしくお願いします。

〜〜*〜〜*〜〜*〜〜*〜〜*〜〜*〜〜*〜〜#!/usr/local/bin/perl

print "Content-type: text/html\n";
print "Set-Cookie: ";
read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
@pairs = split(/&/,$buffer);
foreach $pair(@pairs){
($name,$value) = split(/=/,$pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
$FORM{$name} = $value;
print "$name=$FORM{$name}; ";
}
print "expires=Sat, 1-Jan-2000 00:00:00 GMT;\n";
print "\n";
&Get_Cookie;

sub Get_Cookie {
print "<html><center><h1>Cookie中身</h1></center><hr>\n";
@pairs = split(/;\s*/,$ENV{'HTTP_COOKIE'});
foreach $pair(@pairs){
($name,$value) = split(/=/,$pair);
print "キー:<b>$name</b><br>";
print "実データ:<b>$value</b>";
}
}
print "</html>\n";

sekita [E-Mail] 1999/06/09(水) 11:54:30
上のスクリプトで
print "Set-Cookie: "; を取って

print "expires=Sat, 1-Jan-2000 00:00:00 GMT;\n";
print "\n";

を次のように変えるとクッキーが表示されます。

print "Set-Cookie: a=aa\n";
print "Set-Cookie: b=bb\n";
print "Set-Cookie: c=cc;expires=Sat, 1-Jan-2000 00:00:00 GMT\n\n";

ということはクッキーがただしく設定されていないのでしょう。
もしかすると

print "$name=$FORM{$name}; ";

でクッキーがセットされると勘違いされているのでしょうか?

ふじ 1999/06/09(水) 13:30:50
クッキー一つごとに
Set-Cookie ヘッダを書けば、複数個のクッキーを設定できます。

foreach $pair(@pairs){
($name,$value) = split(/=/,$pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
$FORM{$name} = $value;
print "Set-Cookie: $name=$FORM{$name};expires=Sat, 1-Jan-2000 00:00:00 GMT;\n";
}
こんな風に。

ユミ 1999/06/09(水) 13:46:46
sekitaさん、ふじさん、アドバイスありがとうございます。
そのように記述したのですがクッキーにセットされたのは、
Set-Cookie:
だけになってしまいました。
今度はデータが上手くセットされないんです。
セットクッキーはふじさんに教えていただいた通りに書いて他の記述はなにも変えていません。
何かアドバイスお願いします。

ユミ 1999/06/09(水) 13:50:09
上記に付けたしです。
クッキーの中身を見てみると
Set-Cookie:

172.21.8.26/~fuji/futaba
0
627916800
29316075
1421998368
29277492
*
というようにセットされていました。
ちゃんとデータがセットされていないということはセットクッキーのところの記述がまずいんでしょうか??
ぜひ、教えてください。よろしくお願いします。

ふじ 1999/06/09(水) 14:59:17
元のソースで2行目の
print "Set-Cookie: ";
を削除しました?

ユミ 1999/06/09(水) 15:12:10
はい。そこはちゃんとコメントにしました。
でも、さっきのようにセットされてしまうんです。
助言よろしくお願いします。

ふじ 1999/06/09(水) 16:30:44
とりあえず、ブラウザの設定で「クッキーを受け入れる時に警告を表示する」
にしておいて、(NNなら「編集」→「設定」→「詳細」、
IEなら「インターネットオプション」→「セキュリティー」)
複数回ダイアログが開いて確認を求めて来るかどうか、調べてみては。

あと、一行目を
print "Content-type: text/html\n\n";
とすれば、Set-Cookie を書く部分がブラウザに表示されるので、
それが期待通り(Set-Cookieヘッダの行が複数)になっているかどうか。

ユミ 1999/06/10(木) 13:04:52
[[解決]]
ふじさんの言う通りにしてみたら、なんとデーターが入っていませんでした。
他のやり方がわからなかったので、変数に入れてデータをくっつけてSetCookieしたらうまくいきました。
みなさんどうもありがとうございました。

[上に] [前に] [次に]