Logicus has asked for the wisdom of the Perl Monks concerning the following question:

Hi is anyone else having a problem with Plack::Session? I'm running this code :

use Plack::Builder; use Plack::Session; use Data::Dumper; my $app = sub { my $env = shift; my $session = Plack::Session->new($env); $session->set('counter',$session->get('counter')+1); my $dumped = Dumper($session); return [ 200, [ 'Content-Type' => 'text/plain' ], [ $dumped ], ]; }; builder { enable 'Session'; $app; };

with the standard command line :

plackup action.psgi

And it is not behaving as expected!

The output is as expected and looks like this:

$VAR1 = bless( { 'options' => { 'id' => 'c433450e1163097fc6d53bf06ac89 +3c89a9d0a78' }, 'session' => { 'counter' => 15 } }, 'Plack::Session' );

However, on each click of refresh, the counter is being incremented twice and sometimes 3 times, for no apparent reason.

Odd? I've tried various other variations on the above, including the standard code given in the documentation on CPAN, still the same effect occurs.

Replies are listed 'Best First'.
Re: Plack::Session problem
by Corion (Patriarch) on Sep 23, 2011 at 09:30 UTC
    Most likely, your browser makes more than one request. For example the favicon.ico tends to get requested with each pageload. Consider logging the request URIs as well and logging to the console, so you see what requests get made.
      Doh! - thanks C-man
Re: Plack::Session problem
by Your Mother (Archbishop) on Sep 23, 2011 at 17:02 UTC

    What Corion said and this is a nice snippet to help with the issue-

    builder { enable "Rewrite", rules => sub { return 204 if $_ eq "/favicon.ico"; }; enable "Session"; $app; };

    You might need to cpanm Plack::Middleware::Rewrite first; Plack::Middleware::Rewrite.