[Dancer-users] Removing files referring expired sessions
Stefan Hornburg (Racke)
racke at linuxia.de
Mon Oct 17 15:30:02 CEST 2011
Hello, dancers!
I just wrote the following script to remove session files from
disk which refer to expired sessions.
Easy access to Dancer's settings with use Dancer ':script' was
a big help, no need to parse configuration or keep the expiration
interval in two place.
The script lives at:
http://www.linuxia.de/dancer/scripts/expire_session
Feedback and suggestions are welcome!
Regards
Racke
#! /usr/bin/env perl
#
# Dancer session expiration script.
#
# Copyright (C) 2011 Stefan Hornburg (Racke) <racke at linuxia.de>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public
# License along with this program; if not, write to the Free
# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
# MA 02110-1301 USA.
#
use strict;
use warnings;
use Dancer ':script';
use File::stat;
use Time::Duration::Parse;
my ($now, $expires, $duration, $session_dir, $file, $file_st);
$expires = config->{session_expires};
$session_dir = config->{session_dir};
# converting to seconds
if (defined $expires) {
if ($expires =~ /^\d+$/) {
# already got seconds
$duration = $expires;
}
else {
$duration = parse_duration($expires);
}
}
unless ($duration) {
die "$0: Session expiration not set.\n";
}
# get current time
$now = time();
# go through session directory looking for expired sessions
opendir(SESSIONS, $session_dir)
|| die "$0: Failed to open directory: $session_dir: $!.\n";
while ($file = readdir(SESSIONS)) {
# skip directories etc
next unless -f "$session_dir/$file";
# sanity check on file names for sessions
if ($file !~ /\d{18,}/) {
warn "$0: Skipping suspicious file in session directory: $file.\n";
next;
}
$file_st = stat("$session_dir/$file");
unless ($file_st) {
die "$0: Failed to get file information from $file: $!.\n";
}
if ($file_st->mtime < $now - $duration) {
unless (unlink("$session_dir/$file")) {
die "$0: Failed to remove expired session $file: $!.\n";
}
}
}
closedir(SESSIONS);
--
LinuXia Systems => http://www.linuxia.de/
Expert Interchange Consulting and System Administration
ICDEVGROUP => http://www.icdevgroup.org/
Interchange Development Team
More information about the Dancer-users
mailing list