Fixed I generation to use SHA1 instead of sequential. Added sane defaults to Middleware.
[catagits/Web-Session.git] / lib / Plack / Middleware / Session.pm
index 4a345f1..d85dd5a 100644 (file)
@@ -5,26 +5,40 @@ use warnings;
 use Plack::Session;
 use Plack::Request;
 use Plack::Response;
+use Plack::Session::State::Cookie;
+use Plack::Session::Store;
 
 use parent 'Plack::Middleware';
 
 use Plack::Util::Accessor qw( state store );
 
+sub prepare_app {
+    my $self = shift;
+    unless ($self->state) {
+        $self->state( Plack::Session::State::Cookie->new );
+    }
+
+    unless ($self->store) {
+        $self->store( Plack::Session::Store->new );
+    }
+}
+
 sub call {
     my $self = shift;
     my $env  = shift;
 
     $env->{'psgix.session'} = Plack::Session->new(
-        state   => $self->state,
+        state   => $self->state || $self->default_state,
         store   => $self->store,
         request => Plack::Request->new( $env )
     );
 
-    my $res = Plack::Response->new( @{ $self->app->( $env ) } );
-
-    $env->{'psgix.session'}->finalize( $res );
-
-    $res->finalize();
+    my $res = $self->app->($env);
+    $self->response_cb($res, sub {
+        my $res = Plack::Response->new(@{$_[0]});
+        $env->{'psgix.session'}->finalize( $res );
+        @{$_[0]} = @{$res->finalize};
+    });
 }
 
 1;