summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Haas2010-08-10 17:25:24 +0000
committerRobert Haas2010-08-10 17:26:29 +0000
commitf5867baaa98a100fb6445bb890e2ded73ae23625 (patch)
tree5ffefe3ec5089a49c478f1b081bc16ef3a525045
parent44d7c5dbe25220bdef7469a42f29ce655c532383 (diff)
Expire sessions after about one week, instead of at browser close.
In response to a gripe by Tom Lane.
-rwxr-xr-xbin/expire_sessions11
-rw-r--r--perl-lib/PgCommitFest/DB.pm7
-rw-r--r--perl-lib/PgCommitFest/Handler.pm6
-rw-r--r--perl-lib/PgCommitFest/Request.pm9
4 files changed, 27 insertions, 6 deletions
diff --git a/bin/expire_sessions b/bin/expire_sessions
new file mode 100755
index 0000000..3b57a70
--- /dev/null
+++ b/bin/expire_sessions
@@ -0,0 +1,11 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+require PgCommitFest::Request;
+
+my $db = PgCommitFest::Request->db();
+$db->do(<<EOM);
+DELETE FROM session WHERE login_time < now() - '10 days'::interval;
+EOM
+$db->commit;
diff --git a/perl-lib/PgCommitFest/DB.pm b/perl-lib/PgCommitFest/DB.pm
index 4719007..8eb3f80 100644
--- a/perl-lib/PgCommitFest/DB.pm
+++ b/perl-lib/PgCommitFest/DB.pm
@@ -41,6 +41,13 @@ sub delete {
return $self->{'dbh'}->do($sql, {}, @bind);
}
+sub do {
+ my ($self, $sql, @bind) = @_;
+ warn $sql if $self->{'trace'};
+ $self->{'dirty'} = 1;
+ return $self->{'dbh'}->do($sql, {}, @bind);
+}
+
sub disconnect {
my ($self) = @_;
return $self->{'dbh'}->disconnect();
diff --git a/perl-lib/PgCommitFest/Handler.pm b/perl-lib/PgCommitFest/Handler.pm
index c27ae10..438f7e0 100644
--- a/perl-lib/PgCommitFest/Handler.pm
+++ b/perl-lib/PgCommitFest/Handler.pm
@@ -7,6 +7,7 @@ require PgCommitFest::Request;
use strict;
use warnings;
use FCGI;
+use POSIX;
use Template;
our %ACTION = (
@@ -112,7 +113,10 @@ EOM
$r->db->insert('session', { 'id' => $session_cookie,
'userid' => $u->{'userid'} });
$r->db->commit;
- $r->header('Set-Cookie', "session=$session_cookie; path=/");
+ my $expires = strftime("%a, %d-%b-%Y %H:%M:%S GMT",
+ localtime(time + (86400 * 7)));
+ $r->header('Set-Cookie',
+ "session=$session_cookie; path=/; expires=$expires");
$r->redirect($value{'uri'} ne '' ? $value{'uri'} : '/');
}
else {
diff --git a/perl-lib/PgCommitFest/Request.pm b/perl-lib/PgCommitFest/Request.pm
index dc75d92..9710c5d 100644
--- a/perl-lib/PgCommitFest/Request.pm
+++ b/perl-lib/PgCommitFest/Request.pm
@@ -118,11 +118,10 @@ sub control {
sub db {
my ($self) = @_;
- if (!defined $self->{'db'}) {
- $self->{'db'} =
- PgCommitFest::DB->connect($PG, $PGUSERNAME, $PGPASSWORD);
- }
- return $self->{'db'};
+ return $self->{'db'} if ref $self && defined $self->{'db'};
+ my $db = PgCommitFest::DB->connect($PG, $PGUSERNAME, $PGPASSWORD);
+ $self->{'db'} = $db if ref $self;
+ return $db;
}
sub db_is_connected {