Stefan Bion: Falscher Ablaufzeitpunkt von Cookies

Beitrag lesen

Hi Sven,

Als allererstes sollte dich interessieren, was dein Code
eigentlich für Cookies im HTTP-Header produziert. Denn nur das hat
Einfluß auf den Browser.

Schon klar. Der produziert einen standardkonformen Zeitstempel-String, z.B.:

Sat, 10-Mar-2007 12:53:29 GMT

Die entsprechende Konsolen-Ausgabe sieht so aus:

Sam Mär 10 13:57:54 CET 2007

Die kann aber aussehen, wie sie will, da sie mit dem Code zum Ermitteln der Cookie-Ablaufzeit nichts zu tun hat:

---------------------------------------------------------------------
my $LoginAblaufdatum = MakeCookieExpireDatum(3600); # Das Login soll nach 1 Stunde Inaktivität ablaufen.

SetCookie('VvUsername', $username, $LoginAblaufdatum);

sub MakeCookieExpireDatum
{
 my $Sekunden = shift;

my @Wochentage = ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');
 my @Monate = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
 my ($Sekunde, $Minute, $Stunde, $Tag, $Monat, $Jahr, $Wochentag) = gmtime(time + $Sekunden);
 my $ExpireDate = sprintf("%s, %02d-%s-%04d %02d:%02d:%02d GMT", $Wochentage[$Wochentag], $Tag, $Monate[$Monat], $Jahr + 1900, $Stunde, $Minute, $Sekunde);

$ExpireDate;
}

sub SetCookie
{
 my $CookieName = shift;
 my $CookieValue = shift;
 my $CookieExpireDate = shift;

$CookieValue =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg;
 $CookieExpireDate = 'Fri, 01-Jan-2038 00:00:00 GMT' if('' eq $CookieExpireDate);

print "Set-Cookie: $CookieName=$CookieValue; Expires=$CookieExpireDate\n";
}
---------------------------------------------------------------------

Kann ja durchaus sein, dass dir das letzten Monat (de:Feb == en:Feb) oder den Monat davor (de:Jan == en:Jan) nicht aufgefallen ist.

Die Scripts laufen schon mehrere Jahre.

Gruß,
Stefan