似乎 CGI::Session expire() 函数仅在用户空闲指定时间间隔后才过期。我假设空闲它们意味着用户没有刷新页面或访问任何其他页面。
虽然我看到您可以使用 delete() 强制会话过期,但我没有看到一种自动强制会话过期的方法,无论使用是否空闲。
也许这不是想要的用户体验,但为了理解,有没有办法做到这一点,而不必跟踪时间间隔或使用任何额外的库?
如果会话在过期时返回一个新会话,那么 CGI::Session::is_expired 的意义何在?至少我的脚本似乎无法达到过期状态
sub build_sss{
my($this) = shift;
$cgi = $this->cgi_obj();
my $sid = $this->sid();
my $sss = CGI::Session->load(undef, $cgi, {Directory=>'tmp'}) or die CGI::Session->errstr();
#check expired session
if ( $sss->is_expired() ) {
my $expired_url = $ENV{'SCRIPT_URI'}.'?expired='.$sid;
$this->session_status("SESSION_EXPIRED");
print $cgi->redirect($expired_url); #when expired param is set shows a msg
}
#check if empty create new
if ( $sss->is_empty() ) {
$sss = $sss->new() or $sss->errstr;
$this->session_status("SESSION_NEW");
$sss->expire('30s');
$sss->expire(_TEST_SUB_SESSION => '15s');
}
return $sss;
}