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));
}