为什么我的CGI :: Session会随机排空?

时间:2010-02-17 14:33:32

标签: perl 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 个答案:

答案 0 :(得分:1)

首先,您似乎没有使用strict:您应该这样做。其次,不要使用间接对象表示法。即,使用CGI::Session->new

要了解发生了什么,请使用顺序ID生成器进行调试,并确保查看您认为正在查看的会话。确保在登录时创建会话,但从那时起,您load

检查您如何跟踪会话ID:您使用的是Cookie,查询字符串参数还是参数?确保始终可以使用正确的会话ID。