Session的标识是通过cookie来发送的。<br><br>这个问题。我这样来描述:<br><br>package Web::Action<br>use strict;<br>use warnings;<br>use CGI::Session;<br>use CGI;<br>use CGI::Carp qw/fatalsToBrowser warningsToBrowser/;<br><br>sub new {<br>my $class = shift;
<br>my $this = {};<br><br>$this-&gt;{'q'} = CGI-&gt;new;<br>$this-&gt;{'session'} = CGI::Session-&gt;new;<br><br>bless $this, $class<br><br>}<br><br>....<br><br>1;<br><br>另一个子类<br>package Web::Action::Request;<br>use strict;
<br>use warnings;<br>use base qw/Web::Action/;<br><br>sub new {<br>&nbsp;&nbsp; my $class = shift;<br>&nbsp;&nbsp; my $this = $class-&gt;SUPER::new;<br><br>&nbsp;&nbsp; bless $this, $class;<br><br>}<br><br>#注意这个方法<br>sub run {<br>&nbsp;&nbsp; my $this = shift;<br>
<br>&nbsp;&nbsp; if&nbsp; ( $this-&gt;{'q'} == 'something' ) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; my $module = Web::Action::Request::SomeModule-&gt;new;<br>&nbsp;&nbsp;&nbsp;&nbsp; $module-&gt;run;<br>&nbsp;&nbsp;&nbsp; }<br>}<br>1;<br><br>给出SomeModule的大概实例<br>注意:该类也是Web::Action的子类<br>package Web::Action::Request::SomeModule;
<br>use strict;<br>use warnings;<br>use base qw/Web::Action/<br><br>sub new {<br>&nbsp;&nbsp;&nbsp;&nbsp; my $class = shift;<br>&nbsp;&nbsp;&nbsp; my $this = $class-&gt;SUPER::new;<br>&nbsp;&nbsp; bless $this, $class<br><br>}<br><br>sub run {<br>&nbsp;&nbsp;&nbsp; my $this = shift;
<br>&nbsp;&nbsp;&nbsp; $this-&gt;{'session'}-&gt;param('name', 'value');<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp; # 这个时候是可以看到session刚加的值的。<br>&nbsp; <br>&nbsp;&nbsp;&nbsp; print Dumper($this-&gt;{'session'});<br>&nbsp;}<br><br>1;<br><br>在类:Web::Action::Requst::SomeModule里可以打印出我们需要的值,就是我用param加的。
<br>但是再在其他的任何地方打印,就会发现这个值不存在了。<br><br>比知道是不是CGI::Session的bug.<br><br>我有查文档,其中有个方法引起了我的注意: flush, 它的说明是无需我们手动调用,<br>会在一个引用结束后自动调用,但是我的代码码嵌套了引用。不知道会不会是这个原因引起的。<br><br>请各位指教。<br><br><br>