CGI-BBS > 基礎 > その他 > クッキーが記憶されてないのに、更新すると読み込まれます。


カレッヂ
カレッヂ


質問者 まだまだ初心者  投稿日 6/25(火) 22:23:32
登録画面でユーザーさんに記入して頂いたidやpasswordをクッキーに読み込ませ、
次のページで表示しようとしたら、表示されません。そこで、IE5.1MACの
「編集」→「初期設定」→「COOKIES」でクッキーの中身を表示させたら、idやpasswordは
記憶されていません。
これだけならいいのですが、たまたま、2番目のページ(クッキーを読み込むページ)を
更新したら、今度は読み込まれているのです。
一体、何がいけなくて何が良いのでしょうか?どなたか教えて頂けませんか。

以下、スクリプトです。流れ的には最初のページでformに記入してもらったidとpasswordを
次のページでクッキーに記憶し、さらに、すぐに読み出して、ページの表示に使おうとしています。

#!/usr/bin/perl

require 'cgi-lib.pl';
require 'jcode.pl';

&ReadParse(*form);
&jcode'convert(*form,'sjis');

$data = "$form{'id'}<>$form{'pass'}<>$form{'name'}<>$form{'email'}<>$form{'sex'}<>$form{'age'}<>$quiz_0<>$quiz_1<>$quiz_2<>$quiz_3<>$quiz_4<>$quiz_5<>\n";

open(IN,"+>./player/$form{'id'}.dat")  || die "ファイルを開けませんでした。";
flock(IN, 2);
print IN $data;
flock(IN, 8);
close(IN);

local($sec,$min,$hour,$mday,$mon,$year,$wday) = gmtime(time+30*24*60*60);
@month = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
$gmt = sprintf("%s, %02d-%s-%04d %02d:%02d:%02d GMT",
$week[$wday],$mday,$month[$mon],$year+1900,$hour,$min,$sec);
$cook = "id<>$form{'id'},pass<>$form{'pass'}";

print "Set-Cookie: PID = $cook; expires = $gmt\n";

@pairs = split(/;/, $ENV{'HTTP_COOKIE'});
		foreach (@pairs) {
			local($key,$val) = split(/=/);
			$key =~ s/\s//g;
			$GET{$key} = $val;
}
@pairs = split(/,/, $GET{'PID'});
		foreach (@pairs) {
			local($key,$val) = split(/<>/);
			$COOK{$key} = $val;
}
$c_id = $COOK{'id'};
$c_pass = $COOK{'pass'};

# -----ここから出力 -----
print "Content-type: text/html\n\n";

<以下省略>

プロバイダ参照:http://www.interlink.co.jp
サーバのOS:UNIXサーバ
パソコンのOS:Mac9
エディタ:MAC J PERL
FTPソフト:FETCH V.3
サーバ移転:していない
改造:していない
CGI習熟度:middle

回答者 みけ  [削除]  投稿日 6/26(水) 15:59:06
Cookieとはそういうものなのです。

別に動作的には正常ですよ。
つまりCookieを読み込ませて、すぐにそのCookieの内容を表示させようとしても
表示してくれません。

わたしはいつも強制的にCGI側でリロードさせていますが。

回答者 みけ  [削除]  投稿日 6/26(水) 16:04:21
print "Set-Cookie: PID = $cook; expires = $gmt\n";
の後に
$| = 1;
を書けば上手くいったりして。

検証してないので、ダメかもしれませんが。

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

Web裏技