セッションファイルの削除

mixiでみつけたサンプル。CGI::Session使う上では必要だろう。

  • CGI::Session のドライバにFile, IDジェネレータに MD5 を利用している前提です。
  • 他のドライバや、IDジェネレータを使っている場合は書き換える必要があります。
  • $sessdirの設定は適宜書き換えてください。
  • unlinkに失敗したときのフォローがないのでその辺が気になれば加えてください。

※2008-01-26、コメントで指摘を受けて、明確なエラーを修正。シミケイさん、ありがとうございました。

#!/usr/bin/perl
use strict;
use warnings;
# セッションファイルを置いているディレクトリを指定
my $sessdir = '/home/userdir/sessdir';
opendir(SESSDIR, $sessdir);
while (my $sess = readdir(SESSDIR)) {
	if ($sess =~ /^cgisess_[0-9a-f]{32}$/) {
		my $file = qq|$sessdir/$sess|;
		my $days = -M $file;
		# 最終更新から1日以上経っているセッションファイルを削除
		# 1日より短く指定したい場合は小数点でもOK
		$days > 1 and unlink $file;
	}
}
closedir(SESSDIR);
exit;