cache the CGI::Session object in C4::Context for the duration of the script. This should help pages like circulation.pl which call get_session() again. --- C4/Auth.pm | 4 ++++ C4/Context.pm | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 0 deletions(-)
diff --git a/C4/Auth.pm b/C4/Auth.pm index 4f76ea6..79836d0 100644 --- a/C4/Auth.pm +++ b/C4/Auth.pm @@ -1343,6 +1343,9 @@ sub get_session { my $storage_method = C4::Context->preference('SessionStorage'); my $dbh = C4::Context->dbh; my $session; + if ( $sessionID && defined ( $session = C4::Context->session( $sessionID ) ) ) { + return $session; + } if ($storage_method eq 'mysql'){ $session = new CGI::Session("driver:MySQL;serializer:yaml;id:md5", $sessionID, {Handle=>$dbh}); } @@ -1353,6 +1356,7 @@ sub get_session { # catch all defaults to tmp should work on all systems $session = new CGI::Session("driver:File;serializer:yaml;id:md5", $sessionID, {Directory=>'/tmp'}); } + C4::Context->set_session( $session->id, $session ); return $session; } diff --git a/C4/Context.pm b/C4/Context.pm index 926c1a5..5ea3e3d 100644 --- a/C4/Context.pm +++ b/C4/Context.pm @@ -903,6 +903,39 @@ sub _new_stopwords return $stopwordlist; } +=item session + + C4::Context->session; + +Retrieves the active CGI::Session object + +=cut + +sub session { + my $self = shift; + my $sess_id = shift; + return $context->{"session"}->{$sess_id} if (defined $sess_id and $sess_id and defined $context->{"session"}->{$sess_id}); + return; +} + +=item set_session + + C4::Context->set_session + +Caches the active CGI::Session object + +=cut + +sub set_session { + my $self = shift; + my $id = shift; + my $session = shift; + + return unless ( defined $id && defined $session && $id && $session ); + $context->{"session"}->{ $id } = $session; + return $session; +} + =item userenv C4::Context->userenv; -- 1.7.0.4 _______________________________________________ Koha-patches mailing list Koha-patches@lists.koha.org http://lists.koha.org/mailman/listinfo/koha-patches