我是perl-cgi的新手。我正在使用cgi-perl创建会话并设置cookie。但我无法检索会话的价值。我也粘贴了page1和page2的代码。任何人都可以编辑代码并告诉我哪里出错了。我甚至能够将会话存储在代码中提到的目录中,并且值也存在。
第1页:
#!c:/perl/bin/perl.exe
use strict;
use CGI qw/:standard/;
use CGI::Session qw/-ip-match/;
use CGI;
use DBI;
use CGI::Cookie;
use CGI::Carp qw(fatalsToBrowser);
print "Content-type: text/html\n\n";
print "created Session";
my $session = new CGI::Session(undef, undef, {Directory=>'c:/temp/session/'});
#setting session to expire in 1 hour
$session->expire("+1h");
#store something
$session->param("value1","yakub");
#write to disk
$session->flush();
my $cookie1 = new CGI::Cookie(-name=>'CGISESSID',-value=>$session->id);
print "Set-Cookie: $cookie1\n";
2页:
#!c:/perl/bin/perl.exe
use CGI::Cookie;
use CGI::Session;
use CGI;
use DBI;
use CGI::Carp qw(fatalsToBrowser);
print "Content-type: text/html\n\n";
my $cgi = new CGI;
#try to retrieve cookie.
$sid = $cgi->cookie('CGISESSID') || $cgi->param('CGISESSID') || undef;
$session = load CGI::Session(undef, $sid, {Directory=>'c:/temp/session/'});
$name = $session->param("value1");
print $name;
答案 0 :(得分:0)
你在评论中说你收到了cookie。这是真实和错误的同时。
你的问题是第一行:
print "Content-type: text/html\n\n";
print "created Session";
...
print "Set-Cookie: $cookie1\n";
您要做的第一件事就是将http-header打印到客户端。然后打印一个没有后跟换行符的谎言,然后打印另一个http-header行。
您需要首先打印所有 http-headers 并打印构成响应正文的任何内容。标题和正文/内容必须用空行分隔。
(虽然我们正在使用它,你也可能使用一种不那么古老的调用方式)
#!c:/perl/bin/perl.exe
use strict;
use warnings;
use CGI qw/:standard/;
use CGI::Session qw/-ip-match/;
use CGI::Cookie;
use CGI::Carp qw(fatalsToBrowser);
my $session = CGI::Session->new(undef, undef, {Directory=>'c:/temp/session/'});
#setting session to expire in 1 hour
$session->expire("+1h");
#store something
$session->param("value1","yakub");
#write to disk
$session->flush();
my $cookie1 = CGI::Cookie->new(-name=>'CGISESSID',-value=>$session->id);
print "Set-Cookie: $cookie1\n";
print "Content-type: text/plain\n\n";
print "created Session\n";