Index: Keeper.pm =================================================================== --- Keeper.pm (revision 263) +++ Keeper.pm (revision 264) @@ -114,8 +114,8 @@ sub get_value { - my ($self, $name) = @_; - my $sid = _get_session_id (); + my ($self, $name, %opts) = @_; + my $sid = delete $opts{_session_id} || _get_session_id (); my $session = _get_session_object ( $sid ); return unless ref $session; @@ -133,7 +133,7 @@ sub store_value { my ($self, %opts) = @_; - my $sid = _get_session_id (); + my $sid = delete $opts{_session_id} || _get_session_id (); my $session = _get_session_object ( $sid ); return unless ref $session; @@ -153,10 +153,10 @@ sub delete_key { - my ($self, $key) = @_; + my ($self, $key, %opts) = @_; return unless $key; - my $sid = _get_session_id (); + my $sid = delete $opts{_session_id} || _get_session_id (); my $session = _get_session_object ( $sid ); return unless ref $session; @@ -253,13 +253,16 @@ if ($@) { warn "Session data is not accessible: $@"; undef $sid; - } elsif ( $state->{session}->lifetime ) { - unless ( exists $session{_timestamp} ) { - $session{_timestamp} = $now; - } elsif ( ($now - $session{_timestamp}) > $state->{session}->lifetime ) { - undef $sid; - } elsif ( ($now - $session{_timestamp}) > $state->{session}->checkout ) { - $session{_timestamp} = $now; + } else { + $sid = $session{_session_id}; + if ( $state->{session}->lifetime ) { + unless ( exists $session{_timestamp} ) { + $session{_timestamp} = $now; + } elsif ( ($now - $session{_timestamp}) > $state->{session}->lifetime ) { + undef $sid; + } elsif ( ($now - $session{_timestamp}) > $state->{session}->checkout ) { + $session{_timestamp} = $now; + } } } unless ( $sid ) {