无法将perl cgi会话检索到另一个页面

时间:2013-06-28 04:46:22

标签: perl cgi mod-perl

我是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;                            

1 个答案:

答案 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";