Ark

 view release on metacpan or  search on metacpan

lib/Ark/Plugin/Session/Backend.pm  view on Meta::CPAN

    is      => 'rw',
    isa     => 'Maybe[HashRef]',
    lazy    => 1,
    default => sub {
        my $self = shift;
        return unless $self->session_id;
        $self->get_session_data( $self->session_id );
    },
);

has session_updated => (
    is      => 'rw',
    isa     => 'Bool',
    default => 0,
);

has uuid_model => (
    is  => 'rw',
    isa => 'Str',
);

lib/Ark/Plugin/Session/Backend.pm  view on Meta::CPAN

    isa     => "Int",
    default => 0,
);

has finalized => (
    is      => 'rw',
    isa     => 'Bool',
    default => 0,
);

after $_ => sub { shift->session_updated(1); }
    for qw/get set remove/;

before $_ => sub {
    die "session is already finalized. can't call set or remove method" if shift->finalized;
} for qw/set remove/;

no Ark;

sub get {
    my ($self, $key) = @_;

lib/Ark/Plugin/Session/Backend.pm  view on Meta::CPAN



# Store
sub get_session_data { }
sub set_session_data { }
sub remove_session_data { }

sub finalize_session {
    my ($self, $res) = @_;

    if ($self->session_updated and my $sid = $self->session_id) {
        $self->set_session_data( $sid, $self->session_data );
    }
    $self->finalized(1);
}

1;

lib/Ark/Plugin/Session/State/URI.pm  view on Meta::CPAN

    $next->(@_);
};

around finalize_session => sub {
    my $next = shift;
    my ($self, $res) = @_;

    unless ($self->uri_session_disabled) {
        if ($self->uri_verify_ua) {
            # store ua
            if ($self->session_updated) {
                $self->set( __ua => $self->context->request->user_agent );
            }
        }
    }

    $next->(@_);
};

sub BUILD {
    my ($self) = @_;

t/plugin_session.t  view on Meta::CPAN

    is $res->content, 1, 'request ok';

    my ($sid) = $res->header('Set-Cookie') =~ /testapp_session=(\w+)/;
    ok $sid, 'sid ok';

    $res = request(GET => '/regen');
    is $res->content, 'regenerated', 'sid regenerated';
    my ($new_sid) = $res->header('Set-Cookie') =~ /testapp_session=(\w+)/;

    is get('/incr'), 2, 'session continued ok';
    isnt $sid, $new_sid, 'but session_id updated ok';

    is get('/regen_and_incr'), 3, 'modified session data and regenerated sid on the same request ok';

    # old sid is now removed
    my $request = HTTP::Request->new(GET => '/incr');
    $request->header( Cookie => "testapp_session=$sid" );
    is request($request)->content, 1, 'old session already expired';
}
done_testing;



( run in 0.299 second using v1.01-cache-2.11-cpan-2b0bae70ee8 )