cgi::session を使用しようとしていますが、まだ運がありません。index.html には、ユーザー資格情報を取得し、それらを mysql データベースの値と照合するフォームがあり、正しい場合はセッションを設定し、それ以外の場合は login.html を表示します
# create a new session
my $session = CGI::Session->new() or die CGI::Session->errstr;
print $session->header();
#setting session to expire in 1 hour
$session->expire("+1h");
$session->flush();
#further in page
# logout option
print "<a href='logout.cgi'>logout </a></br>";
# check option
print "<a href='check.cgi'>check page</a>"
このページは適切に出力を提供し、セッションIDを生成しますが、ページの確認リンクをクリックすると、セッション情報が表示されず、常に「セッションなし」メッセージが表示されます。
# cgi page
my $cgi = CGI->new;
#print $cgi->header();
print $cgi->start_html();
print $cgi->p("hello");
print $cgi->cookie('CGISESSID');
# load session info
my $session = CGI::Session->load() or die CGI::Session->errstr;
print $session->header();
if ($session->is_empty)
{
print $cgi->p("no session");
}
else
{
print $cgi->p("<b>session data loaded</b>");
print $session->name;
print $session->id;
print $session->is_expired;
}
print $cgi->end_html();
これはlogout.cgiのコードです
# Delete the session for good:
my $session = CGI::Session->load() or die CGI::Session->errstr;
$session->delete();
$session->flush();
print $session->header(-location=>'http://login.com');
私は何を間違っていますか?
なぜ私は2つの異なる結果を得ているのですか?
1. IE9 と Firefox では開始されたセッション ID が表示されましたが、check.cgi をクリックすると、IE では異なるセッション ID が表示され、Firefox では何も表示されませんでした。
2. 両方のブラウザーがsession->is_empty
true を返しました。check.cgi が実行されたとき。
コマンド ライン モードからスクリプトを実行しても、エラーは表示されません。(構文は OK を返します) cookie と param からセッション情報を取得しようとしていますが、まだ成功していません。
注: 単純な目的を維持するために、ダンサー、触媒などのフレームワークを使用したくない