Middleware added, cookie state added, and example psgi app
[catagits/Web-Session.git] / lib / Plack / Session.pm
1 package Plack::Session;
2 use strict;
3 use warnings;
4
5 use Plack::Util::Accessor qw[
6     id
7     store
8     state
9 ];
10
11 sub new {
12     my ($class, %params) = @_;
13     bless {
14         id    => $params{ state }->get_session_id( $params{ request } ),
15         state => $params{ state },
16         store => $params{ store },
17     } => $class;
18 }
19
20 ## Data Managment
21
22 sub get {
23     my ($self, $key) = @_;
24     $self->store->fetch( $self->id, $key )
25 }
26
27 sub set {
28     my ($self, $key, $value) = @_;
29     $self->store->store( $self->id, $key, $value );
30 }
31
32 sub remove {
33     my ($self, $key) = @_;
34     $self->store->delete( $self->id, $key );
35 }
36
37 ## Lifecycle Management
38
39 sub expire {
40     my $self = shift;
41     $self->store->cleanup( $self->id );
42     $self->state->expire_session_id( $self->id );
43 }
44
45 sub finalize {
46     my ($self, $response) = @_;
47     $self->store->persist( $self->id, $response );
48     $self->state->finalize( $self->id, $response );
49 }
50
51 1;