978c5ae91ea2faea4d4151633a13e9c4a5296616
[catagits/Web-Session.git] / lib / Plack / Middleware / Session.pm
1 package Plack::Middleware::Session;
2 use strict;
3 use warnings;
4
5 use Plack::Session;
6 use Plack::Request;
7 use Plack::Response;
8 use Plack::Session::State::Cookie;
9 use Plack::Session::Store;
10
11 use parent 'Plack::Middleware';
12
13 use Plack::Util::Accessor qw( state store );
14
15 sub prepare_app {
16     my $self = shift;
17     unless ($self->state) {
18         $self->state( Plack::Session::State::Cookie->new );
19     }
20
21     unless ($self->store) {
22         $self->store( Plack::Session::Store->new );
23     }
24 }
25
26 sub call {
27     my $self = shift;
28     my $env  = shift;
29
30     $env->{'plack.session'} = Plack::Session->new(
31         state   => $self->state,
32         store   => $self->store,
33         request => Plack::Request->new( $env )
34     );
35
36     my $res = $self->app->($env);
37     $self->response_cb($res, sub {
38         my $res = Plack::Response->new(@{$_[0]});
39         $env->{'plack.session'}->finalize( $res );
40         @{$_[0]} = @{$res->finalize};
41     });
42 }
43
44 1;
45
46 __END__
47
48 =pod
49
50 =head1 NAME
51
52 Plack::Middleware::Session - Middleware for session management
53
54 =head1 SYNOPSIS
55
56   use Plack::Middleware::Session;
57
58 =head1 DESCRIPTION
59
60 =head1 BUGS
61
62 All complex software has bugs lurking in it, and this module is no
63 exception. If you find a bug please either email me, or add the bug
64 to cpan-RT.
65
66 =head1 AUTHOR
67
68 Tatsuhiko Miyagawa
69
70 Stevan Little E<lt>stevan.little@iinteractive.comE<gt>
71
72 =head1 COPYRIGHT AND LICENSE
73
74 Copyright 2009 Infinity Interactive, Inc.
75
76 L<http://www.iinteractive.com>
77
78 This library is free software; you can redistribute it and/or modify
79 it under the same terms as Perl itself.
80
81 =cut
82
83