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;
}