0

セッションの初期化をモジュールの1つに移動するまで、正常に機能しているコードがいくつかあります。これで、Cookieはprint-> header-を介して設定されなくなったため、実行するたびに新しいセッションが作成されます。(大幅に整理/編集された)コードは次のとおりです。

# 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が設定されます。

どこが間違っているのでしょうか?

4

1 に答える 1

0

Cookie をチェックしているときに問題があることに気付きました。32 文字の Cookie をチェックしていますが、欠落している可能性があるという事実を無視しています。私の愚かさでごめんなさい!

于 2013-03-11T10:57:45.103 に答える