Hallo.
Nein, es gibt hier tatsächlich keine zuverlässige Lösung. Eine Möglichkeit wäre, dich auf die Übergabe per Cookie zu beschränken. Da hast du zwar auch nicht in der Hand, ob die beim Schließen des Browsers verfallen, aber das zumindest ist das Verhalten, das im Normalfall erwartet werden kann. Und damit erscheint die SID nicht in der URI. Hat natürlich den Nachteil, dass deine Anwendung nicht läuft, wenn der Keks abgelehnt wird.
Ich frag mich allerdings, was es mit einer "Dauer der Session" von 10 Stunden auf sich hat. Die Option "session.gc_maxlifetim" gibt an, ab wann nach dem letzten Aufruf innerhalb der Session die Session-Daten als Müll betrachtet werden. Das sind also zwei wichtige Unterschiede zu deiner Annahme (oder zumindest zu deiner Aussage).
Erstens bestimmst du damit nicht die Dauer der Session. Wenn du die Option auf 5 Minuten setzt und alle 4 Minuten in der Session auf einen Link klickst, läuft die Sitzung ohne Ende.
Zweitens endet die Sitzung nicht zu diesem Zeitpunkt. Sie wird eben als Müll angesehen. Die Müllabfuhr kommt aber, wenn du ihr nichts anderes beibringst nur mit einer Wahrscheinlichkeit von 1:100 pro Seitenaufruf. Kommt also jemand nach knapp über 10 Stunden inaktivität wieder jemand auf einen Link in deiner Anwendung, ist die Wahrscheinlichkeit groß, dass die Daten noch da sind und die Session (obwohl > 10 h) wieder aufgenommen wird (und um weitere 10+ Stunden verlängert wird).
Ich würde bei einer derartig langen Zeitspanne zumindest vom Benutzer fordern, dass er nach x Minuten Inaktivität nochmal sein Passwort zur Bestätigung eingibt - ähnlich einem Bildschirmschoner mit Passwortschutz.
Basti |