Optimize session update in sub store (#671, #LEMONLDAP-673)

This commit is contained in:
Clément Oudot 2014-02-26 17:10:39 +00:00
parent 900008c942
commit a232f149fa

View File

@ -251,10 +251,9 @@ sub new {
"You've to indicate a an Apache::Session storage module !" ) "You've to indicate a an Apache::Session storage module !" )
unless ( $self->{globalStorage} ); unless ( $self->{globalStorage} );
# Use global storage for all backedns by default # Use global storage for all backends by default
# Persistent # Persistent
$self->{persistentStorage} ||= $self->{globalStorage}; $self->{persistentStorage} ||= $self->{globalStorage};
if ( !$self->{persistentStorageOptions} if ( !$self->{persistentStorageOptions}
or !%{ $self->{persistentStorageOptions} } ) or !%{ $self->{persistentStorageOptions} } )
@ -2226,8 +2225,8 @@ sub store {
} }
# Main session # Main session
my $session = $self->getApacheSession( $self->{id} ) my $session = $self->getApacheSession( $self->{id} );
or return PE_APACHESESSIONERROR; return PE_APACHESESSIONERROR unless ( $session->data );
# Compute unsecure cookie value if needed # Compute unsecure cookie value if needed
if ( $self->{securedCookie} == 3 ) { if ( $self->{securedCookie} == 3 ) {
@ -2235,6 +2234,8 @@ sub store {
$self->{cipher}->encryptHex( $self->{id}, "http" ); $self->{cipher}->encryptHex( $self->{id}, "http" );
} }
# Fill session
my $infos = {};
foreach my $k ( keys %{ $self->{sessionInfo} } ) { foreach my $k ( keys %{ $self->{sessionInfo} } ) {
next unless defined $self->{sessionInfo}->{$k}; next unless defined $self->{sessionInfo}->{$k};
my $displayValue = $self->{sessionInfo}->{$k}; my $displayValue = $self->{sessionInfo}->{$k};
@ -2242,8 +2243,9 @@ sub store {
$displayValue = '****'; $displayValue = '****';
} }
$self->lmLog( "Store $displayValue in session key $k", 'debug' ); $self->lmLog( "Store $displayValue in session key $k", 'debug' );
$session->update( { $k => $self->{sessionInfo}->{$k} } ); $infos->{$k} = $self->{sessionInfo}->{$k};
} }
$session->update($infos);
PE_OK; PE_OK;
} }