2010-02-17 75 views
2

會議加載罰款的大部分,但它是隨機清除所有數據中的某個時候,我不知道爲什麼:爲什麼我的CGI :: Session會隨機清空自己?

創建我的新會話:

$session = CGI::Session->new("driver:file",undef,{Directory => '/tmp'}); 

$session->param('logged_in', 1); 
$session->expire('logged_in', '+10m'); 

$session->expire('+1h'); 

現在,當我去另一個頁面,然後將我做的會話:

$session = CGI::Session->load ("driver:file", $sid, {Directory => '/tmp'}); 

return 0 if $session->is_expired; 

return 0 if !$session->param('logged_in'); 

return $session; 

我的問題是,有時,前10分鐘大關達的「LOGGED_IN」參數是空的,當它不應該。爲什麼會發生這種情況?

+1

@ user105033那麼,你還在用' - > new'和' - > load'來觀察問題還是你不是?你的編輯讓我的迴應看起來毫無意義。你使用的是哪個版本的代碼? – 2010-02-17 15:34:53

回答

1

首先,您似乎沒有使用strict:您應該。其次,不要使用間接對象符號。即,使用CGI::Session->new

要了解發生了什麼,請使用順序ID生成器進行調試,並確保您正在查看您認爲正在查看的會話。確保你在登錄時創建會話,但是從那一刻開始,你就是load

檢查如何跟蹤會話ID:您使用的是Cookie,查詢字符串參數還是來自參數?確保正確的會話ID始終可用。

+0

我通過查詢字符串傳遞正確的SID,即使使用load也會發生同樣的情況。當使用load時,我檢查is_empty並且它是​​隨機的。我的主機可以在/ tmp目錄中存在多長時間文件? – user105033 2010-02-17 14:41:03

+0

嗯,似乎現在工作,從間接對象符號切換...不知道爲什麼,但我會留意少許論壇。 – user105033 2010-02-17 14:56:34

+0

@ user105033如果不使用間接對象符號解決您的問題,那麼http://perldoc.perl.org/perlobj.html#Indirect-Object-Syntax中列出的其中一個陷阱是有責任的。可能,「新」被稱爲子程序而不是方法。 – 2010-02-17 15:26:13

相關問題