Кажется, что функция 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;
}