Perl加载会话无法正常工作

时间:2014-05-30 09:57:02

标签: perl session cookies cgi

我遇到了这个问题,我的会话无法在第一页后加载。它确实在创建后获取第一页会话。这是我的第一页:

的index.cgi

use strict;
use warnings;
use CGI qw/:standard/;                  
use CGI::Session qw/-ip-match/;              
use CGI;                
use DBI;                
use CGI::Cookie;
use CGI::Carp qw(fatalsToBrowser);

my $username;
my $password;
my $session;
my $sid;
my $cookie;

my $cgi = CGI->new();
my $submit = CGI->new();
my $a = CGI->new();

$username = $a->param('username');
$password = $a->param('password');

$session = new CGI::Session("driver:File", undef, {Directory=>'/tmp/session'});
$sid = $session->id();
$cookie = $cgi->cookie(CGISESSID => $session->id);
$session->param("username", $username);
$session->flush();
print $cgi->header( -cookie=>$cookie,-location=>'index2.cgi' );

第一页工作正常,它会在它应该的目录中创建cookie。它还存储我想要的用户名。这是第一页的结果。

  

$ D = {' _SESSION_ID' => ' 4244435418205139ea02fde065811aa1'' _SESSION_ATIME' => 1401441306,' _SESSION_REMOTE_ADDR' => ' 127.0.0.1''用户名' => ' ADMIN1'' _SESSION_CTIME' => 1401441306} ;; $ d

之后,第二页应该加载cookie并在该页面中打印它们。但它不起作用。这是我的第二页:

已更新

index2.cgi

use strict;
use warnings;
use CGI;
use CGI::Cookie;
use CGI::Carp qw(fatalsToBrowser);
use DBI;
use CGI::Session qw/-ip-match/;

my $sid;
my $cookie;
my $session;
my $q;
my $name;
my $username;

my $cgi = CGI->new();

$sid = $cgi->cookie('CGISESSID') || $cgi->param('CGISESSID') || undef;
$session = load CGI::Session(undef, $sid, {Directory=>'/tmp/session'});

$username = $session->param("username");

print $sid;
print $session->header();

此第二页中的两个打印都不返回任何内容。这意味着它不会从第一页加载。我怎样才能实现这一目标?我的代码有什么问题吗?因为我是从 CGI :: Session :: Tutorial 学习的。有人能帮助我吗?

1 个答案:

答案 0 :(得分:1)

嗯,对于初学者来说,Directory在两个页面之间是不同的(" / tmp / session" vs" / tmp")。