MojoX-Session

 view release on metacpan or  search on metacpan

lib/MojoX/Session/Store/Dbi.pm  view on Meta::CPAN

package MojoX::Session::Store::Dbi;

use strict;
use warnings;

use base 'MojoX::Session::Store';

use MIME::Base64;
use Storable qw/nfreeze thaw/;

__PACKAGE__->attr('dbh');
__PACKAGE__->attr(table => 'session');
__PACKAGE__->attr(sid_column => 'sid');
__PACKAGE__->attr(expires_column => 'expires');
__PACKAGE__->attr(data_column => 'data');

sub create {
    my ($self, $sid, $expires, $data) = @_;

    $data = encode_base64(nfreeze($data)) if $data;

    my $table          = $self->table;
    my $sid_column     = $self->sid_column;
    my $expires_column = $self->expires_column;
    my $data_column    = $self->data_column;

    my $sth = $self->dbh->prepare(<<"");
    INSERT INTO $table ($sid_column,$expires_column,$data_column) VALUES (?,?,?)

    return unless $sth;

    return $sth->execute($sid, $expires, $data);
}

sub update {
    my ($self, $sid, $expires, $data) = @_;

    $data = encode_base64(nfreeze($data)) if $data;

    my $table          = $self->table;
    my $sid_column     = $self->sid_column;
    my $expires_column = $self->expires_column;
    my $data_column    = $self->data_column;

    my $sth = $self->dbh->prepare(<<"");
    UPDATE $table SET $expires_column=?,$data_column=? WHERE $sid_column=?

    return unless $sth;

    return $sth->execute($expires, $data, $sid);
}

sub load {
    my ($self, $sid) = @_;

    my $table          = $self->table;
    my $sid_column     = $self->sid_column;
    my $expires_column = $self->expires_column;
    my $data_column    = $self->data_column;

    my $sth = $self->dbh->prepare("SELECT * FROM $table WHERE $sid_column=?");
    return unless $sth;

    my $rv = $sth->execute($sid);
    return unless $rv;

    my $result = $sth->fetchrow_hashref;
    return unless $result;

    $result->{$data_column} = thaw(decode_base64($result->{$data_column}))
      if $result->{$data_column};

    return ($result->{$expires_column}, $result->{$data_column});
}

sub delete {
    my ($self, $sid) = @_;

    my $table          = $self->table;
    my $sid_column     = $self->sid_column;

    my $sth = $self->dbh->prepare("DELETE FROM $table WHERE $sid_column=?");
    return unless $sth;

    return $sth->execute($sid);
}

1;
__END__

=head1 NAME

MojoX::Session::Store::Dbi - Dbi Store for MojoX::Session

=head1 SYNOPSIS



( run in 0.486 second using v1.01-cache-2.11-cpan-39bf76dae61 )