d1407c1f874ad758c245152140db46492cf65573
[catagits/Web-Session.git] / lib / Plack / Session / State.pm
1 package Plack::Session::State;
2 use strict;
3 use warnings;
4
5 use Plack::Util::Accessor qw[
6     generator
7     extractor
8     session_key
9 ];
10
11 sub new {
12     my ($class, %params) = @_;
13     bless {
14         session_key => $params{ session_key } || 'plack_session',
15         generator   => do { my $id = 1; sub { $id++ } },
16         extractor   => sub { $_[0]->param( $_[1] ) },
17         expired     => {}
18     } => $class;
19 }
20
21 sub expire_session_id {
22     my ($self, $id) = @_;
23     $self->{expired}->{ $id }++;
24 }
25
26 sub extract {
27     my ($self, $request) = @_;
28     my $id = $self->extractor->( $request, $self->session_key );
29     return unless $id && not exists $self->{expired}->{ $id };
30     return $id;
31 }
32
33 sub generate {
34     my $self = shift;
35     $self->generator->()
36 }
37
38 # given a request, get the
39 # session id from it
40 sub get_session_id {
41     my ($self, $request) = @_;
42     $self->extract( $request )
43         ||
44     $self->generate
45 }
46
47 1;