2010-02-17 62 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

相关问题