Path: csiph.com!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Stefan Reuther Newsgroups: de.comp.lang.javascript Subject: =?UTF-8?Q?Re:_Aktion_beim_Schlie=c3=9fne_eines_Browserfensters?= Date: Thu, 6 Dec 2018 18:57:21 +0100 Lines: 39 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Trace: individual.net xUjfOczkfUjck09G/i7aGwgrWDUmIvvfTG6OSGGh3GcNWTpi41 Cancel-Lock: sha1:GtNSJwNIpDHDsfCSlhthgvNiaPo= User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 Hamster/2.1.0.1538 In-Reply-To: Xref: csiph.com de.comp.lang.javascript:4989 Am 06.12.2018 um 14:24 schrieb Ralph Stahl: > Genau das tut die gefundene Lösung nun. Auszug: > > $(document).ready(function () { > $(window).on('unload', function () { > $.ajax({ > 'url': 'meineaktionen.php', > 'async': false > // https://stackoverflow.com/a/19274533/9776286 > }); > ... > }); > > Entscheidend ist das 'async':false, weil eben sonst der Tab/Browser weg > wäre, bevor die Aktion ausgeführt werden konnte. In meinefunktionen.php > wird z.B. die laufende Session gekillt, das ist hier wichtig. Das verlässt sich drauf, dass der Browser dich im onunload noch Dinge tun lässt, die Zeit brauchen. Darauf würde ich mich nicht verlassen. Im Zweifelsfall hat der Nutzer den Browser per Taskmanager beendet (zum Beispiel, weil er davon genervt war, dass der Browser in einem synchronen XMLHTTPRequest hing), da wird ein onunload sowieso nicht ausgeführt. Besser wäre da eine Lösung, wo der Browser extra eine Socketverbindung zum Server aufbaut. Wenn das Browserfenster geschlossen wird, egal aus welchem Grund, wird die Socketverbindung geschlossen; daran kann die Serverseite erkennen, dass die Session beendet ist. Eine Möglichkeit wäre ein Websocket. Das braucht serverseitig aber ein wenig mehr als nur ein paar php-Skripte. Eine andere Lösung wäre, z.B. alle 10s ein Ping an die Webseite zu schicken. Empfängt der Server für 30s kein Ping, ist die Session beendet. Das ist auch mit normalen php-Skripten realisierbar, und ist speziell im lokalen Netzwerk durchaus vertretbar. Stefan