我遇到了这个问题,我的会话无法在第一页后加载。它确实在创建后获取第一页会话。这是我的第一页:
的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 学习的。有人能帮助我吗?
答案 0 :(得分:1)
嗯,对于初学者来说,Directory
在两个页面之间是不同的(" / tmp / session" vs" / tmp")。