Plack::Session as a library goes to where Plack::Request goes.
use Plack::Util::Accessor qw(
state
store
- session_class
);
sub prepare_app {
$self->state( 'Cookie' ) unless $self->state;
$self->state( $self->inflate_backend('Plack::Session::State', $self->state) );
$self->store( $self->inflate_backend('Plack::Session::Store', $self->store) );
-
- Plack::Util::load_class($self->session_class) if $self->session_class;
}
sub inflate_backend {
$env->{'psgix.session.options'} = { id => $id };
- if ($self->session_class) {
- $env->{'plack.session'} = $self->session_class->new($env);
- }
-
my $res = $self->app->($env);
$self->response_cb($res, sub { $self->finalize($env, $_[0]) });
}
B<NOTE:> As of version 0.04 the session is stored in C<psgix.session>
instead of C<plack.session>.
-Also, if you set I<session_class> option (see below), we create a
-session object out of the hash reference in C<plack.session>.
-
=head2 State
=over 4
more robust solution see L<Plack::Session::Store::File> or
L<Plack::Session::Store::Cache>.
-=item I<session_class>
-
-This can be used to create an actual session object in
-C<plack.session> environment. Defaults to none, which means the
-session object is not created but you can set C<Plack::Session> to
-create an object for you.
-
=back
=head1 BUGS
sub prepare_app {
my $self = shift;
- Plack::Util::load_class($self->session_class) if $self->session_class;
$self->session_key("plack_session") unless $self->session_key;
$self->state( Plack::Session::State::Cookie->new );
sub new {
my ($class, $env) = @_;
- # NOTE: when you make a subclass, be sure to NEVER save $env in
- # your hash. That will create a circular reference.
bless {
session => $env->{'psgix.session'},
options => $env->{'psgix.session.options'},
=head1 SYNOPSIS
# Use with Middleware::Session
- enable "Session", session_class => "Plack::Session";
+ enable "Session";
+ # later in your app
+ use Plack::Session;
my $app = sub {
my $env = shift;
- my $session = $env->{'plack.session'}; # not psgix.
+ my $session = Plack::Session->new($env);
$session->id;
$session->get($key);
my $app = sub {
my $env = shift;
- my $counter = $env->{'plack.session'}->get('counter') || 0;
+ my $counter = $env->{'psgix.session'}->{counter} || 0;
my $body = "Counter=$counter";
- $counter++;
- $env->{'plack.session'}->set(counter => $counter);
+ $env->{'psgix.session'}->{counter} = $counter + 1;
return [ 200, [], [ $body ] ];
};
-$app = Plack::Middleware::Session->wrap($app, session_class => "Plack::Session");
+$app = Plack::Middleware::Session->wrap($app);
test_psgi $app, sub {
my $cb = shift;
use Test::More;
use Test::Exception;
use Plack::Middleware::Session;
+use Plack::Session;
sub create_session {
my($mw, $env) = @_;
my $session;
my $app = sub {
my $env = shift;
- $session = $env->{'plack.session'};
+ $session = Plack::Session->new($env);
return sub {
my $responder = shift;
$responder->([ 200, [], [] ]);
response_test
]};
- my $m = sub { Plack::Middleware::Session->wrap($_[0], session_class => "Plack::Session", state => $state, store => $storage) };
+ my $m = sub { Plack::Middleware::Session->wrap($_[0], state => $state, store => $storage) };
$response_test ||= sub {
my($res_cb, $session_id, $check_expired) = @_;