Thread [CGI::Session] Prüfen ob einzelner gespeicherter Parameter abgelaufen (18 answers)
Opened by GwenDragon at 2024-05-02 17:04

GwenDragon
 2024-05-03 10:09
#196082 #196082
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
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:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
# 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:
Code: (dl )
1
2
3
4
5
6
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
returns a session parameter set to $name or undef if it doesn't exist
https://metacpan.org/release/MARKSTOS/CGI-Session-...


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)

View full thread [CGI::Session] Prüfen ob einzelner gespeicherter Parameter abgelaufen