Perl CGI::Session save_param сохраняет все параметры в виде массива под одним ключом

Я использую CGI::Session хранить данные сеанса из CGI::Application (в частности, я использую CGI::Session сквозь CGI::Application::Plugin::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'.
Ожидается ли такое поведение?
Если так, то почему?

1 ответ

Я не уверен, что понимаю, что вы имеете в виду, но это выглядит странно. Вы делаете не то, что говорит CGI::Session doc. Вы не можете просто сохранить объект CGI. Вы должны хранить каждый параметр индивидуально.

# Storing data in the session:
$session->param('f_name', 'Sherzod');

Если вы хотите просто сохранить все параметры 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));
}
Другие вопросы по тегам