1 package Plack::Middleware::Session;
8 use Plack::Session::State::Cookie;
9 use Plack::Session::Store;
11 use parent 'Plack::Middleware';
13 use Plack::Util::Accessor qw( state store );
17 unless ($self->state) {
18 $self->state( Plack::Session::State::Cookie->new );
21 unless ($self->store) {
22 $self->store( Plack::Session::Store->new );
30 $env->{'plack.session'} = Plack::Session->new(
31 state => $self->state,
32 store => $self->store,
33 request => Plack::Request->new( $env )
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};
52 Plack::Middleware::Session - Middleware for session management
59 return [ 200, [ 'Content-Type' => 'text/plain' ], [ 'Hello Foo' ] ];
69 This is a Plack Middleware component for session management. By
70 default it will use cookies to keep session state and store data
71 in memory. This distribution comes also comes with other state
78 =item L<Plack::Session::State>
80 This will maintain session state by passing the session through
81 the request params. It does not do this automatically though,
82 you are responsible for passing the session param.
84 =item L<Plack::Session::State::Cookie>
86 This will maintain session state using browser cookies.
94 =item L<Plack::Session::Store>
96 This is your basic in-memory session data store. It is volatile storage
97 and not recommended for multiprocessing environments. However it is
98 very useful for development and testing.
100 =item L<Plack::Session::Store::File>
102 This will persist session data in a file. By default it uses
103 L<Storable> but it can be configured to have a custom serializer and
106 =item L<Plack::Session::Store::CHI>
108 This will persist session data using the L<CHI> module. This
109 offers a lot of flexibility due to the many excellent L<CHI>
112 =item L<Plack::Session::Store::Null>
114 Sometimes you don't care about storing session data, in that case
115 you can use this noop module.
121 All complex software has bugs lurking in it, and this module is no
122 exception. If you find a bug please either email me, or add the bug
129 Stevan Little E<lt>stevan.little@iinteractive.comE<gt>
131 =head1 COPYRIGHT AND LICENSE
133 Copyright 2009 Infinity Interactive, Inc.
135 L<http://www.iinteractive.com>
137 This library is free software; you can redistribute it and/or modify
138 it under the same terms as Perl itself.