我正在尝试使用 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 等框架,以保持简单的目的