bunch more docs
[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::Builder;
57   use Plack::Middleware::Session;
58
59   my $app = sub {
60       return [ 200, [ 'Content-Type' => 'text/plain' ], [ 'Hello Foo' ] ];
61   };
62
63   builder {
64       enable 'Session';
65       $app;
66   };
67
68 =head1 DESCRIPTION
69
70 This is a Plack Middleware component for session management. By
71 default it will use cookies to keep session state and store data
72 in memory. This distribution comes also comes with other state
73 and store solutions.
74
75 =head2 State
76
77 =over 4
78
79 =item L<Plack::Session::State>
80
81 This will maintain session state by passing the session through
82 the request params. It does not do this automatically though,
83 you are responsible for passing the session param.
84
85 =item L<Plack::Session::State::Cookie>
86
87 This will maintain session state using browser cookies.
88
89 =back
90
91 =head2 Store
92
93 =over 4
94
95 =item L<Plack::Session::Store>
96
97 This is your basic in-memory session data store. It is volatile storage
98 and not recommended for multiprocessing environments. However it is
99 very useful for development and testing.
100
101 =item L<Plack::Session::Store::File>
102
103 This will persist session data in a file. By default it uses
104 L<Storable> but it can be configured to have a custom serializer and
105 deserializer.
106
107 =item L<Plack::Session::Store::CHI>
108
109 This will persist session data using the L<CHI> module. This
110 offers a lot of flexibility due to the many excellent L<CHI>
111 drivers available.
112
113 =item L<Plack::Session::Store::Null>
114
115 Sometimes you don't care about storing session data, in that case
116 you can use this noop module.
117
118 =back
119
120 =head1 BUGS
121
122 All complex software has bugs lurking in it, and this module is no
123 exception. If you find a bug please either email me, or add the bug
124 to cpan-RT.
125
126 =head1 AUTHOR
127
128 Tatsuhiko Miyagawa
129
130 Stevan Little E<lt>stevan.little@iinteractive.comE<gt>
131
132 =head1 COPYRIGHT AND LICENSE
133
134 Copyright 2009 Infinity Interactive, Inc.
135
136 L<http://www.iinteractive.com>
137
138 This library is free software; you can redistribute it and/or modify
139 it under the same terms as Perl itself.
140
141 =cut
142
143