Movable Typeのセッションタイムアウトは、標準で4時間に設定されている。そして、このタイムアウト時間のカウントダウン開始は、ログオン時間である。
ユーザが編集している途中でも、ログオンから4時間経過すれば、容赦なくタイムアウトとなる。記事の「保存」「公開」ボタンを押した時にちょうどタイムアウトになった場合、現在の編集内容が失われる。これは仕様なのか不具合なのか知らないが、これでは都合が悪い。
タイムアウト時間のカウントダウンを、ユーザが何らかのアクションを起こすたびにリセットして、その時点から4時間というようにシステム側のスクリプトを修正する。
スクリプトに、赤で着色した部分を追加すると、get_unexpired_valueサブルーチンにアクセスするたびに、セッション($candidate)の保存時間が現在時間にアップデート($candidate->start(time))される。
lib/MT/Session.pm
sub get_unexpired_value {
my $timeout = shift;
## Do not use a cached session even when the driver supports it
my $driver = __PACKAGE__->driver;
my $disabled;
if ( $driver->isa('Data::ObjectDriver::Driver::BaseCache') ) {
$disabled = Data::ObjectDriver::Driver::BaseCache->Disabled || 0;
Data::ObjectDriver::Driver::BaseCache->Disabled(1);
}
my $candidate = __PACKAGE__->load(@_);
if ( defined $disabled ) {
Data::ObjectDriver::Driver::BaseCache->Disabled($disabled);
}
if ( $candidate && $candidate->start() < time - $timeout ) {
$candidate->remove();
$candidate = undef;
}
########## fix: timeout time is updated, when user access to MT
elsif( $candidate ) {
$candidate->start(time);
$candidate->save;
}
##########
return $candidate;
}