enhancement
major
minor
major
minor
major
#29509
Die Cookie-Prüfung weist den erneuten Aufruf ihrer eigenen URL ab und meldet dabei die Sitzung ab
TopLogicServlet prüft für eine Anfrage ohne Sitzung, ob der Browser Cookies speichert: initSessionCheck setzt den Einmal-Marker TEST_SESSION auf eine Sitzung und leitet auf <startPage>?sessionCheckInProgress=true um, processSessionCheck liest ihn dort wieder aus.
Der Parameter überlebt die Prüfung in der Adressleiste, das Attribut nicht. Wird die URL erneut angefordert — F5, oder ein window.location.reload() wie beim Reload einer beendeten Sitzung (#29504) —, meldet die zweite Hälfte „Cookies können nicht gesetzt werden" und invalidiert dabei die vorgefundene Sitzung, die nicht ihre Testsitzung ist. Die Fehlerseite wird geforwardet, die URL bleibt stehen, jeder weitere Reload wiederholt das.
curl -s -c jar -L "<app>/view/" curl -s -b jar "<app>/view/?sessionCheckInProgress=true" # -> Fehlerseite, Sitzung abgemeldet
Lösung
Die Prüfung stellt eine Frage: hat der Browser die Sitzung zurückgeschickt, die er bekommen hat? Das beantwortet isRequestedSessionIdFromCookie(). initSessionCheck startet daher keine Prüfung, wenn die Anfrage schon eine ID im Cookie mitbringt, und processSessionCheck invalidiert nur noch die eigene Testsitzung. Ein Browser ohne Cookie-Speicher schickt keine ID und fällt weiterhin durch.