書き込んだばかりのcookieが読み込めません
cookieを書込んだ直後、書込めたか(cookieをオフにしていたり、cookieを書込めない携帯端末からのアクセスかもしれないので)確認をしようと、cookieを読込もうとしたのですが、cookieが書込まれているにもかかわらず情報を取得することができません
実験環境として、htmlファイルにボタンを作って、cgiへ飛び、そのcgi内でcookieを書込み、cookieが書込めたかどうかで分岐して、表示するようにしています
(cgiを一度実行したあと一旦ブラウザで前のhtmlファイルに戻って)cookieが既に書込まれた状態で、改めてhtmlファイルのボタンを押せばcookieは読込めますが、最初にcookieを書込んだ時に同じcgi内で即読込みを行ったら読込めません
書込が完結する前に読込みに行っているから読込めないのかとも思い、読込み前にタイムラグを作っても見ましたがやはり読込めません
どうすれば書込み直後に読み込めるのでしょうか?
色々ネットで調べても見ましたが、いっこうに解決策が見つかりません
ご存じの方ぜひご教授下さい
よろしくお願いします
なお、下にperlのコードを書いておきます
#クッキーを書込
$test{sid} = "12345";
&set_cookie($test{sid});
#タイムラグ
use Time::HiRes;
Time::HiRes::sleep(0.8);
#クッキーを読込
($cookie{test}) = &get_cookie;
if(!$cookie{test}){ print "読み込めてない"; }
else{ print "読み込めた"; }
######→読み込めません#####
#クッキー書込sub
sub set_cookie {
local(@cook) = @_;
local($gmt, $cook, @t, @m, @w);
@t = gmtime(time + 2*60*60);
@m = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
@w = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
$gmt = sprintf("%s, %02d-%s-%04d %02d:%02d:%02d GMT", $w[$t[6]], $t[3], $m[$t[4]], $t[5]+1900, $t[2], $t[1], $t[0]);
foreach (@cook) { s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg; $cook .= "$_<>"; }
print "Set-Cookie: SID=$cook; expires=$gmt; path=/;\n";
}
#クッキー読込sub
sub get_cookie {
local($key, $val, *cook);
$cook = $ENV{'HTTP_COOKIE'};
foreach ( split(/;/, $cook) ) { ($key, $val) = split(/=/); $key =~ s/\s//g; $cook{$key} = $val; }
foreach ( split(/<>/, $cook{'SID'}) ) { s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg;
push(@cook,$_); }
return (@cook);
}
お礼
ヘッダを確認しました。 Set-Cookie を出力したあとに改行2回入れていたので、ヘッダが終わってしまっていたのでした。。。 おっちょこちょいな話で誠に申し訳ありません。 ありがとうございました。