Ado
view release on metacpan or search on metacpan
lib/Ado/Sessions.pm view on Meta::CPAN
package Ado::Sessions;
use Mojo::Base -base;
use Mojo::JSON;
has [qw(cookie_domain secure)];
has cookie_name => 'ado';
has cookie_path => '/';
has default_expiration => 3600;
sub generate_id {
return Mojo::Util::sha1_hex(rand() . $$ . {} . time);
}
sub session_id {
my ($self, $c) = @_;
#once
state $cookie_name = $self->cookie_name;
return
$c->param($cookie_name)
|| $c->cookie($cookie_name)
|| '';
}
sub get_instance {
my $config = shift;
my $options = $config->{session}{options} || {};
my $type = lc($config->{session}{type} || 'mojo'); #sane default
if ($type eq 'mojo') {
return Mojolicious::Sessions->new(%$options);
}
elsif ($type eq 'file') {
require Ado::Sessions::File;
return Ado::Sessions::File->new(%$options);
}
elsif ($type eq 'database') {
require Ado::Sessions::Database;
return Ado::Sessions::Database->new(%$options);
}
Carp::croak('Please provide valid session type:(mojo,file,database)');
return;
}
sub prepare_load {
my ($self, $c, $session) = @_;
# "expiration" value is inherited
my $expiration = $session->{expiration} // $self->default_expiration;
return if !(my $expires = delete $session->{expires}) && $expiration;
return if defined $expires && $expires <= time;
my $stash = $c->stash;
return unless $stash->{'mojo.active_session'} = keys %$session;
$stash->{'mojo.session'} = $session;
$session->{flash} = delete $session->{new_flash} if $session->{new_flash};
return;
}
sub prepare_store {
( run in 0.843 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )