Hello,
Ich würde beim beforeunload einen Request senden, der den Timeout auf ein paar Minuten setzt. Wenn die Seite verlassen wird, dann wird die Session schnell durch einen Cronjob beendet. Gleichzeitig sollte im beforeunload das Polling (neu) gestartet werden. Wenn der Nutzer nämlich auf der Seite bleibt, können weitere Requests gemacht werden, die den Timeout wieder hochsetzen.
Man muss aber nicht die Session beeenden, nur weil der User "die Seite" vorzeitig verlässt.
Erstmal sollten wir uns darüber einig sein, ob damit "die Domain" gemeint ist, oder ob nur eine andere "Seite" innerhalb des Domainangebotes aufgerufen wurde.
Aber auch, wenn der User das Domainangebot (erstmal) nicht weiter in Anspruch nimmt, muss man nicht gleich die Session wegschmeißen. Man verklickt scih schon mal und freut sich dann 10 Sekunden später meistens, wenn man wieder dort aufsetzen kann, wo man stand.
Das Problem liegt ganz wo anders:
Wenn für einen vollständigen Buchungsvorgang umfangreiche Änderungen in der DB oder im Dateisystem zu erledigen sind, sollte man die zusammengehörigen Aktionen immer erst in der Session speichern und dann erst auf "Bestätigen" buchen. Für die Durchführung des Buchungsvorganges, der dann aus mehreren Statements usw. bestehen kann, sollte man den User-Abort ausschließen. Wenn der Browser zugeklappt wird, muss das angestoßene Script also noch zuende laufen.
Ein Abort würde nämlich bei den meisten Scriptsprachen im Backend dazu führen, dass das Script auch sofort beendet wird und dadurch "halbe Buchungen" entstehen können. Damit ist die Datenbasis dann inkonsistent geworden.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg