Hallo,
kann jemand erklären, wie genau die Sitzungen bei aktivierten Cookies und das Erneuern der Sitzung per Javascript im Hintergrund genau ablaufen?
Mein Verständnis bisher ist folgendes:
Im ACP kann man die Option Gültigkeitslänge einer Sitzung session_timeout festlegen, beispielsweise 1800 Sekunden = 30 Minuten. Ein Benutzer ruft eine Seite auf und schließt den Tab nicht (er liest beispielsweise die vielen langen Beiträge auf der Seite im Thema und braucht dafür länger als die eingestellte Gültigkeitslänge). Er besucht in weiteren Tabs die Seite ebenfalls nicht. Kurz bevor die Sitzung ausläuft, versucht ein Javascript die Sitzung zu erneuern (siehe WCF.js WCF.System.KeepAlive). Das schlägt nun fehl, beispielsweise weil man in dem Moment keine Internetverbindung hat (man ist zum Beispiel mobil online und hat gerade keinen Empfang). Davon merkt man als Benutzer erst mal nichts, sondern liest munter das Thema weiter. Nachdem die Sitzung nicht erneuert werden konnte, stoppt das Javascript den Versuch die Sitzung zu erneuern. Nach 40 Minuten, also 10 Minuten nachdem die Sitzung abgelaufen ist, versucht der Benutzer einen Beitrag auf dieser Themenseite zu liken oder über die Schnellantwort eine Antwort zu verfassen. Nun bekommt er die Meldung "Ihre Sitzung ist abgelaufen, bitte melden Sie sich erneut an.". Ruft er daraufhin die Startseite auf, um sich neu anzumelden, oder lädt den Tab neu, ist er durch die Cookies wieder automatisch eingeloggt und hat eine neue Session.
Falls ich den Prozess oben richtig verstanden und erklärt habe, stellt sich mir nun folgende Frage: Wieso wird die Sitzung nicht beim Liken oder Schnellantwort Verfassen bereits erneuert? Die Cookies werden ja auch bei diesen Anfragen mitgeschickt. Entsprechend sollte man, auch nachdem die Sitzung abgelaufen ist, diese bei diesen AJAX Anfragen erneuern können.
Das aktuelle Verhalten, dass der Benutzer die Meldung "Ihre Sitzung ist abgelaufen, bitte melden Sie sich erneut an." angezeigt bekommt, aber sobald er die Seite neu lädt trotzdem bereits angemeldet ist, erscheint mir nicht sonderlich intuitiv. Meinen Benutzern wohl auch nicht, da ich sonst nicht darauf angesprochen werden würde, wieso dieser Fehler auftrete.