Oh je, ich hab das übersehen; bei abgelaufenen Parametern schlägt in load() ja clear() zu, was bedeutet, dass param() dann undefined liefert.
Siehe auf CPAN
Session.pm Zeile 750:
# checking expiration tickers of individuals parameters, if any:
my @expired_params = ();
if ( $self->{_DATA}->{_SESSION_EXPIRE_LIST} ) {
while (my ($param, $max_exp_interval) = each %{ $self->{_DATA}->{_SESSION_EXPIRE_LIST} } ) {
if ( ($self->{_DATA}->{_SESSION_ATIME} + $max_exp_interval) <= time() ) {
push @expired_params, $param;
}
}
}
$self->clear(\@expired_params) if @expired_params;
Also ist
not defined $session->param($token)
gleichbedeutend mit einem noch von mir hinzuzufügenden
$session->is_expired($token)
beispielhafte Lösung:
if ( not defined $session->param( $tokenname ) { # Parameter der Session abgelaufen?
my $tok = CreateNewToken(); # Neues Token erstellen
$session->param( $tokenname, $tok ); # Token in Session speichern
$session->expire( "10m" ); # Token nach 10 Minuten ablaufen lassen
$session->flush(); # Session speichern
}
Leider steht nix in der Doku, dass ein abgelaufener Parameter undef liefert
Quote
Und ich habe in der Doku clear() anders interpretiert.
Das kommt davon, wenn eine nicht im Quellcode sucht und analysiert.
Editiert von GwenDragon: Beispiel für Lösung hinzugefügt
Last edited: 2024-05-04 10:22:44 +0200 (CEST)