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');

我究竟做错了什么?

我怎么会得到两个不同的结果。
1. IE9和Firefox显示started session id,但是点击check.cgi IE显示不同的session id,而Firefox没有显示。
2. 两个浏览器都返回,session->is_empty为真。当 check.cgi 运行时。

当我从命令行模式运行脚本时,它不会显示任何错误。(返回语法正常)我正在尝试从 cookie 和 param 中检索会话信息,但还没有运气。

注意:不想使用 dancer、catalyst 等框架,以保持简单的目的

4

0 回答 0