1

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_emptytrue を返しました。check.cgi が実行されたとき。

コマンド ライン モードからスクリプトを実行しても、エラーは表示されません。(構文は OK を返します) cookie と param からセッション情報を取得しようとしていますが、まだ成功していません。

注: 単純な目的を維持するために、ダンサー、触媒などのフレームワークを使用したくない

4

0 に答える 0