Hi zusammen,
ich habe auf meinem Webspace schon seit Jahren diverse selbstgezimmerte Perl-CGIs laufen, wie Gästebuch, TV-Tips und Online-Vereinsverwaltung. Die CGIs haben keine Session-Verwaltung, sondern speichern Username und Paßwort in verschlüsselter Form in Cookies mit einem Ablaufzeitpunkt von 1 Stunde ab der aktuellen Zeit. Auf diese Weise kann das Script erkennen, daß der Benutzer noch eingeloggt ist und ihn nach 1 Stunde Inaktivität automatisch ausloggen. Funktionierte bis jetzt auch alles wunderbar.
Seit heute abend habe ich jedoch ein Problem in Opera 9.02/Windows: Der Ablaufzeitpunkt gesetzter Cookies liegt 1 Stunde in der Vergangenheit, statt 1 Stunde in der Zukunft. Also eine Differenz von -2 Stunden.
Wenn man auf die Shell des Servers geht und dort die aktuelle Zeit abfragt (date), wird dort auch tatsächlich "Fre Mär 9 22:57:01 CET 2007" ausgegeben, obwohl es in Wirklichkeit eigentlich knapp 2 Stunden später ist, nämlich der 10.03.2007 um 00:54 Uhr. Wenn ich dann testweise mal die Cookie-Ablaufzeit auf 2 Stunden erweitere, bleiben die gesetzten Cookies auch tatsächlich für 3 Minuten gültig (2 Stunden minus der Zeitdiffrenz zwischen Client und Server von 1:57 Stunden).
(Die Cookie-Ablaufzeit errechne ich im Script übrigens mittels gmtime(time + 3600), und auch die dabei ermittelte GMT-Zeit ist gegenüber der tatsächlichen GMT-Zeit natürlich um 2 Stunden zu früh.)
Ein Blick auf die Support-Seite des Providers offenbart übrigens, daß heute "im Lauf des Tages verschiedene Wartungsarbeiten" durchgeführt wurden - ich nehme also mal an, daß dabei die Serverzeit verstellt wurde...
S e l t s a m e r w e i s e tritt dieses Problem jedoch nicht beim Firefox auf! Dort haben die Cookies korrekte Ablaufzeitpunkte, nämlich genau die 1 Stunde (minus 3 Minuten) in der Zukunft. Anscheinend korrigiert Firefox die (falsche) Server-Zeit automatisch so, daß sie mit der Client-Zeit übereinstimmt. W i e m a c h t d e r d a s ? Und gibt es eine Möglichkeit, dies auch bei Opera zu erreichen?
Oder gibt es eine andere Möglichkeit, CGI-seitig zu erreichen, daß sich die Ablaufzeit von Cookies an der Client-Zeit orientiert? Klar, man könnte per JavaScript in einer Hidden-Variable des Formulars die aktuelle Client-Uhrzeit an den Server übermitteln und diese als Referenz benutzen, aber das ist sicherlich nicht der "Königsweg"...
Gruß,
Stefan