Hello,
Onclose gibts nicht.
Na, dann heißt er eben onblur().
Spielt ja für die Idee erstmal keine Geige.
Das eigentliche Problem bei Deinem Vorhaben ist die Unmöglichkeit, am Server feststellen zu können, was der User in oder mit seinem Browser so anstellt.
Dann stellen wir eben fest, was er _nicht_ anstellt.
In Deiner Vorstellung spielt sich ein normaler Ablauf mit User betritt die Seite und verlässt sie wieder, indem er woanders hinzieht oder den Browser schliesst. Was aber machst Du bzw. Dein am Server laufendes Skript, wenn zB der Rechner des Users explodiert oder weniger dramatisch, einfach der Stecker gezogen wird?
Dann ist die Verbindung unterbrochen, was der Server dann feststellen kann. Gehen wir von einem reinrassigen Zustands- und Verbindugslosen Protokoll aus, dann muss man die Zustandsorientierung eben wieder künstlich erzeugen. Ein Retrigger-Request reicht da i.d.R. aus. Da am Server aber kein kontinuierlicher Prozess läuft, der dies überwachen könnte, muss jeder Retrigger-Request selber dafür sorgen, dass das Logout stattfindet, wenn er keinen Nachfolger mehr hat. Dazu müssen sich die Zyklen nur überlappen.
R---------------|
R------------------|
R---------------------|
R------------------| # ist im Netz Umwege gelaufen,
R----------------| # dafür kam der Nachfolger noch
# rechtzeitig
R = reTrigger
| = Logout, wenn kein reTrigger stattgefunden hat. Der Trigger setzt einfach nur einen Zähler rauf, der in der Session steht. Jeder Request kennt seinen eigenen Zählerstand. Wenn dieser am Ende der Scriptlaufzeit (auf dem Server) immer noch den eigenen Stand hat, wird getrennt, also die Session auf ungültig geschaltet oder gelöscht, je nachdem, welche Maßnahmen vorher noch getroffen werden müssen.
Wenn der Heartbeat 3 Sec. beträgt, kann man nach >8 Sec auf jeden Fall ausloggen können. Wenn dann mal ein Request verloren geht, sollte die "Verbindung" trotzdem bestehen bleiben.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg