use Object::Signature ();
use Carp;
-our $VERSION = '0.20';
+our $VERSION = '0.19_01';
my @session_data_accessors; # used in delete_session
BEGIN {
return $c->NEXT::finalize_headers(@_);
}
-sub finalize {
+sub finalize_body {
my $c = shift;
- my $ret = $c->NEXT::finalize(@_);
- # then finish the rest
+ # We have to finalize our session *before* $c->engine->finalize_xxx is called,
+ # because we do not want to send the HTTP response before the session is stored/committed to
+ # the session database (or whatever Session::Store you use).
$c->finalize_session;
- return $ret;
+
+ return $c->NEXT::finalize_body(@_);
}
sub finalize_session {
my $sid = $c->sessionid;
+ my $session_data = $c->_session;
if (%$flash_data) {
- $c->store_session_data( "flash:$sid", $flash_data );
+ $session_data->{__flash} = $flash_data;
}
else {
- $c->delete_session_data("flash:$sid");
+ delete $session_data->{__flash};
}
+ $c->_session($session_data);
+ $c->_save_session;
}
}
$c->_tried_loading_flash_data(1);
if ( my $sid = $c->sessionid ) {
- if ( my $flash_data = $c->_flash
- || $c->_flash( $c->get_session_data("flash:$sid") ) )
+
+ my $session_data = $c->session;
+ $c->_flash($session_data->{__flash});
+
+ if ( my $flash_data = $c->_flash )
{
$c->_flash_key_hashes({ map { $_ => Object::Signature::signature( \$flash_data->{$_} ) } keys %$flash_data });
This method is used to invalidate a session. It takes an optional parameter
which will be saved in C<session_delete_reason> if provided.
+NOTE: This method will B<also> delete your flash data.
+
=item session_delete_reason
This accessor contains a string with the reason a session was deleted. Possible
This method is extended and will extend the expiry time before sending
the response.
-=item finalize
+=item finalize_body
-This method is extended and will call finalize_session after the other
-finalizes run. Here we persist the session data if a session exists.
+This method is extended and will call finalize_session before the other
+finalize_body methods run. Here we persist the session data if a session exists.
=item initialize_session_data
Christian Hansen
-Yuval Kogman, C<nothingmuch@woobling.org> (current maintainer)
+Yuval Kogman, C<nothingmuch@woobling.org>
Sebastian Riedel
+Tomas Doran (t0m) C<bobtfish@bobtfish.net> (current maintainer)
+
+Sergio Salvi
+
And countless other contributers from #catalyst. Thanks guys!
=head1 COPYRIGHT & LICENSE