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