Perl Session save_param将所有参数保存为一个键下的数组

Perl Session save_param将所有参数保存为一个键下的数组,perl,cgi,cgi-application,Perl,Cgi,Cgi Application,我使用CGI::Session存储来自CGI::Application的会话数据(具体来说,我通过CGI::Application::Plugin::Session模块使用CGI::Session)。 在我的一种应用程序模式中,我执行以下操作: my $self = shift; # Get CGI query object my $q = $self->query(); $self->session->save_param($q); 要将我的

我使用
CGI::Session
存储来自
CGI::Application
的会话数据(具体来说,我通过
CGI::Application::Plugin::Session
模块使用
CGI::Session
)。 在我的一种应用程序模式中,我执行以下操作:

    my $self = shift;
    # Get CGI query object
    my $q = $self->query();
    $self->session->save_param($q);
要将我的参数保存到会话数据中,但是在使用
$self->session->param('user')
检索它们时,我发现只有用户参数包含任何数据,即使其他参数正在发送到服务器端,并且可以通过
$q->param()访问
从会话检索到的用户参数是一个参数数组,但我希望
$self->session->param('user')
将返回一个包含参数“user”内容的字符串。
这是预期的行为吗?

如果是这样,为什么?

我不确定我是否完全理解你的意思,但这看起来很奇怪。你没有按照政府说的做。不能只保存CGI对象。您需要单独存储每个参数

如果只想在会话中存储所有CGI参数,请执行以下操作:

# $q := CGI object
# $session := CGI::Session object

$session->param('foo', $q->param('foo'));
$session->param('bar', $q->param('bar'));
或者你甚至可以像这样为所有人做:

foreach my $key ($q->param) {
  $session->param($key, $q->param($key));
}

您能告诉我们什么是数据键/值对吗?您的
$self->session
的data::Dumper输出是什么样子的?它怎么能保存CGI对象呢…?看到$q的转储和/或$q->param()的一个输出也会很有帮助。我对perl很陌生,不知道有任何方法可以转储数据,所以谢谢。在查看转储文件之后,我检查了发送参数的表单,发现有两个字段名为“user”,现在我觉得自己相当愚蠢,尽管我认为这并不是我认为会发生的错误。这种情况发生了。如果您使用
$q->Vars
将所有参数放在一个散列中,并且有多个字段具有相同的名称,它们最终形成一个字符串,并与一个
\0
字符连接在一起,这将非常有趣。很好,对吗?实际上CGI::Session doc确实包含save_param方法,该方法应该“与对$query->param()返回的每个查询参数调用param($name,$value)相同”。我还没有深入研究代码,但我怀疑CGI:App query对象使用其param()方法做的事情不正确。
foreach my $key ($q->param) {
  $session->param($key, $q->param($key));
}