2012-12-06 47 views
0

使用CGI::Session來存儲來自CGI::Application的會話數據(具體來說,我使用CGI::Session通過CGI::Application::Plugin::Session模塊)。 在我的應用模式之一我這樣做:Perl CGI :: Session save_param將所有參數保存爲一個密鑰

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

你能告訴我們什麼是數據鍵/值對嗎? –

+0

'$ self-> session'的Data :: Dumper輸出是什麼樣的?它甚至如何保存CGI對象......? – simbabque

+0

看到$ q的轉儲和/或從$ q-> param() – RickF

回答

0

我不確定我完全理解你的意思,但這看起來很奇怪。你沒有做什麼CGI::Session doc說你應該。你不能保存CGI對象。您需要單獨存儲每個參數。

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

如果你想剛纔的所有CGI PARAMS存儲在您的會議,像這樣做:

# $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)); 
} 
+0

實際上,CGI :: Session doc確實包含了save_param方法,它應該與「$ query-> param()」返回的每個查詢參數調用param($ name,$ value)相同。我還沒有深入研究代碼,但我懷疑CGI:App查詢對象的param()方法沒有做正確的事情。 – RickF

+0

我<3'perl -d'。 –