Catalyst-Plugin-Session-Store-Redis
view release on metacpan or search on metacpan
lib/Catalyst/Plugin/Session/Store/Redis.pm view on Meta::CPAN
package Catalyst::Plugin::Session::Store::Redis;
# ABSTRACT: Redis Session store for Catalyst
our $VERSION = '0.901'; # VERSION
use warnings;
use strict;
use base qw/
Class::Data::Inheritable
Catalyst::Plugin::Session::Store
/;
use MRO::Compat;
use MIME::Base64 qw(encode_base64 decode_base64);
use Redis;
use Storable qw/nfreeze thaw/;
use Try::Tiny;
__PACKAGE__->mk_classdata(qw/_session_redis_storage/);
sub get_session_data {
my ($c, $key) = @_;
$c->_verify_redis_connection;
if(my ($sid) = $key =~ /^expires:(.*)/) {
$c->log->debug("Getting expires key for $sid");
return $c->_session_redis_storage->get($key);
} else {
$c->log->debug("Getting $key");
my $data = $c->_session_redis_storage->get($key);
if(defined($data)) {
return thaw( decode_base64($data) )
}
}
return;
}
sub store_session_data {
my ($c, $key, $data) = @_;
$c->_verify_redis_connection;
if(my ($sid) = $key =~ /^expires:(.*)/) {
$c->log->debug("Setting expires key for $sid: $data");
$c->_session_redis_storage->set($key, $data);
} else {
$c->log->debug("Setting $key");
$c->_session_redis_storage->set($key, encode_base64(nfreeze($data)));
}
# We use expire, not expireat because it's a 1.2 feature and as of this
# release, 1.2 isn't done yet.
my $exp = $c->session_expires;
my $duration = $exp - time;
$c->_session_redis_storage->expire($key, $duration);
# $c->_session_redis_storage->expireat($key, $exp);
return;
}
sub delete_session_data {
my ($c, $key) = @_;
$c->_verify_redis_connection;
$c->log->debug("Deleting: $key");
$c->_session_redis_storage->del($key);
return;
}
sub delete_expired_sessions {
my ($c) = @_;
# Null op, Redis handles this for us!
( run in 0.583 second using v1.01-cache-2.11-cpan-39bf76dae61 )