[PerlChina] CGI::Session的问题

黄叶 hylinux at gmail.com
Tue Jun 6 21:46:13 PDT 2006


Session的标识是通过cookie来发送的。

这个问题。我这样来描述:

package Web::Action
use strict;
use warnings;
use CGI::Session;
use CGI;
use CGI::Carp qw/fatalsToBrowser warningsToBrowser/;

sub new {
my $class = shift;
my $this = {};

$this->{'q'} = CGI->new;
$this->{'session'} = CGI::Session->new;

bless $this, $class

}

....

1;

另一个子类
package Web::Action::Request;
use strict;
use warnings;
use base qw/Web::Action/;

sub new {
   my $class = shift;
   my $this = $class->SUPER::new;

   bless $this, $class;

}

#注意这个方法
sub run {
   my $this = shift;

   if  ( $this->{'q'} == 'something' ) {
      my $module = Web::Action::Request::SomeModule->new;
     $module->run;
    }
}
1;

给出SomeModule的大概实例
注意:该类也是Web::Action的子类
package Web::Action::Request::SomeModule;
use strict;
use warnings;
use base qw/Web::Action/

sub new {
     my $class = shift;
    my $this = $class->SUPER::new;
   bless $this, $class

}

sub run {
    my $this = shift;
    $this->{'session'}->param('name', 'value');

   # 这个时候是可以看到session刚加的值的。

    print Dumper($this->{'session'});
 }

1;

在类:Web::Action::Requst::SomeModule里可以打印出我们需要的值,就是我用param加的。
但是再在其他的任何地方打印,就会发现这个值不存在了。

比知道是不是CGI::Session的bug.

我有查文档,其中有个方法引起了我的注意: flush, 它的说明是无需我们手动调用,
会在一个引用结束后自动调用,但是我的代码码嵌套了引用。不知道会不会是这个原因引起的。

请各位指教。
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.pm.org/pipermail/china-pm/attachments/20060607/638d14d0/attachment.html 


More information about the China-pm mailing list