パンプキンスパイスラテ

IT系のことが多めの日記帳です

タイムアウトの判定を最終アクションからの経過時間に変更するプラグイン

こちらよりダウンロード
MTで、UserSessionTimeoutに値を設定すると、タイムアウトの時間が指定できる。だけどこれ、変な仕様で、最終アクションからの経過時間ではなくて、ログインしてからの経過時間で判定している。そうすると、ずーっとログインして作業していても、時間になったらタイムアウトしてしまう。それって超不便じゃないかな。
ということで、タイムアウトの判定を最終アクションからの経過時間に変更するプラグイン

設置方法

plugins
`-- TimeoutJudgedLastAction.pl

プラグインフォルダに突っ込むだけ。

設定

mt-config.cgi

UserSessionTimeout 20000

とセッションタイムアウトの時間を記述します(単位は秒)
記述しない場合のデフォルトは、
UserSessionTimeout 14400 で4時間です。

ソース

package MT::Plugin::TimeoutJudgedLastAction;
use strict;
use base qw(MT::Plugin);
use MT;

our $VERSION = '1.0';

my $plugin = MT::Plugin::TimeoutJudgedLastAction->new({
  name        => 'TimeoutJudgedLastAction',
  version     => $VERSION,
  author_name => 'takeru-c',
  author_link => 'http://d.hatena.ne.jp/takeru-c/',
  description => '最終アクションからの時間でタイムアウト判定をします。',
});

MT->add_plugin($plugin);

no warnings qw(redefine);
*MT::Session::get_unexpired_value = \&_get_unexpired_value;

sub _get_unexpired_value {
    use MT::Session;
    my $timeout = shift;
    my $candidate = MT::Session->load(@_);
    if ($candidate && $candidate->start() < time - $timeout) {
        $candidate->remove();
        $candidate = undef;
    }
    elsif ($candidate) {
        $candidate->start(time);
        $candidate->save;
    }
    return $candidate;
}

1;

まぁソースみるとわかると思うけど、実際にやってることは、セッションタイムアウト判定をしている部分で、時間内だったらセッション開始時刻を現在時刻で上書きするだけ。

        $candidate->start(time);
        $candidate->save;

ぜひお試しください。

追記

一部修正しました。

        my $sess = MT::Session->load($candidate->id());
        $sess->start(time);
        $sess->save;
↓
        $candidate->start(time);
        $candidate->save;

無意味に2回ロードしてたよorz

Movable Typeプラグイン開発入門

Movable Typeプラグイン開発入門