CGI :: Session没有设置cookie

时间:2013-03-10 19:19:55

标签: cgi session-cookies perl-module

我有一些工作正常的代码 - 直到我将会话初始化移到我的一个模块中。现在不再通过print->标头设置cookie - 因此每次运行时都会创建一个新会话。这是(经过大量修剪/编辑的)代码:

# login.pl

use CGI;
use CGI::Session ( '-ip_match' );
use DBI;

use MyPM qw(&open_db &close_db &getSession); 

use strict;
use warnings;

my $cgi = new CGI;
my $dbh = open_db;
my $session = getSession($cgi, $dbh);   # Call to MyPM.pm
close_db($dbh);

...... code ......

print $session->header(-type => 'application/json');
print $json;

=======================================

# MyPM.pm

use CGI::Session ( '-ip_match' );

our @ISA = qw(Exporter);
our @EXPORT_OK = qw( open_db close_db getSession );

sub getSession {  

  my $cgi = shift;
  my $dbh = shift;

  my $CGICOOKIE = $cgi->cookie('CGISESSID') || 'x';
  my $lng = length($CGICOOKIE);
  if ( $lng != 32 ) print redirect( -URL => $home );

  my $session = CGI::Session->new('driver:MySQL', $cgi, { Handle=>$dbh }) ;
  return $session; 

}

如果我将对getSession的调用更改回此:

my $session = CGI::Session->new('driver:MySQL', $cgi, { Handle=>$dbh });

它再次完美运行并且设置了cookie。

我哪里可能出错?

1 个答案:

答案 0 :(得分:0)

我意识到问题是当我检查cookie时 - 我正在检查一个32个字符的cookie ......但是忽略了它可能丢失的事实。 对不起我的愚蠢!