会话在大多数情况下加载正常,但它会随机清除所有数据,但我不知道原因:
创建我的新会话:
$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'参数在它不应该是空的时候是空的。为什么会发生这种情况?
答案 0 :(得分:1)
首先,您似乎没有使用strict:您应该这样做。其次,不要使用间接对象表示法。即,使用CGI::Session->new
。
要了解发生了什么,请使用顺序ID生成器进行调试,并确保查看您认为正在查看的会话。确保在登录时创建会话,但从那时起,您load
。
检查您如何跟踪会话ID:您使用的是Cookie,查询字符串参数还是参数?确保始终可以使用正确的会话ID。