diff --git a/lib/Dancer2/Core/App.pm b/lib/Dancer2/Core/App.pm index d181fa4f3..6d952777c 100644 --- a/lib/Dancer2/Core/App.pm +++ b/lib/Dancer2/Core/App.pm @@ -150,6 +150,12 @@ sub engine { sub session { my ($self, $key, $value) = @_; + # shortcut reads if no session exists, so we don't + # instantiate sessions for no reason + if ( @_ == 2 ) { + return unless $self->context->has_session; + } + my $session = $self->context->session; croak "No session available, a session engine needs to be set" if !defined $session; diff --git a/t/session_lifecycle.t b/t/session_lifecycle.t index a06c4507b..d3b3c65e1 100644 --- a/t/session_lifecycle.t +++ b/t/session_lifecycle.t @@ -51,14 +51,12 @@ foreach my $engine (@engines) { ok !$cookie, "no cookie set" or diag explain $cookie; - # empty session created if session read attempted + # no empty session created if session read attempted $res = $ua->get("http://127.0.0.1:$port/read_session"); ok $res->is_success, "/read_session"; $cookie = extract_cookie($res); - ok $cookie, "session cookie set" + ok !$cookie, "no cookie set" or diag explain $cookie; - my $sid1 = $cookie->{"dancer.session"}; - like $res->content, qr/name=''/, "empty session"; # set value into session $res = $ua->get("http://127.0.0.1:$port/set_session/larry"); @@ -66,6 +64,7 @@ foreach my $engine (@engines) { $cookie = extract_cookie($res); ok $cookie, "session cookie set" or diag explain $cookie; + my $sid1 = $cookie->{"dancer.session"}; # read value back $res = $ua->get("http://127.0.0.1:$port/read_session");