"Browser closed" mitbekommen [hinfällig]



  • Gibt es irgendwelche Tricks, mit denen man Server-seitig zuverlässig mitbekommen kann, wenn der Browser geschlossen wurde? Mit zuverlässig meine ich mal keine "False Positives".

    Da HTTP "Connection-Less" ist, und soweit ich weiss sowohl der Browser als auch ein eventuell beteiligter Proxy die Verbindung jederzeit schliessen dürfen (zumindest nachdem ein Request vollständig abgearbeitet wurde), gehe ich davon aus, dass es keine solchen Tricks gibt.
    Zumindest keine "problemlosen".

    Falls das nicht stimmen sollte, bitte schreibt mir wie das geht.

    Falls es Server-/Plattformabhängig sein sollte: Server ist IIS (mit ASP .NET), die primär zu unterstützenden Browser sind IE 7, IE 8 und Firefox.

    Nur zur Erklärung: ich hab' nen Request bekommen dass ich bei "User schliesst Browser" nen Event schreiben soll, zusätzlich zu Session-Expired, und vor allem vor Session expired.
    Da ich mit Web-Gedöns nicht SO viel Erfahrung habe, wollte ich erst nochmal nachfragen, bevor ich endgültig "geht nicht" sage.



  • Was mir spontan einfällt, ich weiss aber nicht ob es funktioniert, wäre ein Java-Skript o.ä, das eine TCP-Verbindung zum Server offen hält. Wenn der Browser geschlossen wird oder abstürzt, würde die Verbindung abgebrochen anstatt geschlossen werden. Den Unterschied könnte der Server bemerken. Vermutlich wird es nicht mit allen Browsern funktionieren und ist vielleicht doch nur eine Schnapsidee. 😉



  • Pfuh. Jo. An sowas in der Art hab' ich auch gedacht.
    Natürlich kann ich es nicht 100% sicher sagen ohne es auszurpobieren, aber ich würde das mal spontan in die Kategorie "nicht problemlos" einreihen 🙂

    Ideen hab ich auch ein paar gehabt, aber ich kann eben nicht "sicher" beurteilen, bzw. aus Erfahrung sagen, ob diese "problemlos" umsetzbar sind.

    z.B. könnte man das HTTP Dokument einfach "offen" lassen. Manche Server/Applikationen machen das ja, um dynamisch Content nach zu schicken. Meist Java-Script Code, der dann über DOM das Dokument modifiziert. Weiss aber nicht inwieweit sich das mit IIS verträgt. Es soll ja auch nicht unnötig Resourcen verbraten. Und die Applikation verwendet wie gesagt .NET Gedöns, ich glaube da kann man gar nicht ohne Weiteres das HTTP Dokument offen lassen.

    Oder man könnte natürlich nen Auto-Refresh verwenden. Dadurch könnte man das Session-Expired Timeout drastisch runterschrauben. Ist aber auch nicht wirklich die gewünschte Lösung, da der Auto-Refresh natürlich den Server unnötig bombardiert, und es *soll* die Session ja auch auslaufen, auch wenn der Browser offen bleibt. Vonwegen Sicherheit und so. (Manche User gehen ja gerne mal vom PC weg, und lassen ihre Session offen *schauder*)



  • lang lang kurz kurz

    Z in Morsecode?



  • du könntest dich ans onunload hängen und mit JavaScript einen kleinen Request abschicken. Das Event wird ausgelöst wenn die Seite verlassen wird (also auch durch einen Link). Dann einfach einen kleinen Hinweis in der Datenbank ablegen. Wird eine Seite geöffnet, wird dieser Eintrag wieder entfernt (um diejenigen auszufiltern, die lediglich eine andere eurer Seiten angefordert haben). Wenn der Eintrag nach x Sekunden noch vorhanden ist, kannst du dein Event auslösen (das müsste aber ein Programm auf eurem Server übernehmen).

    False Positives sind dabei eigentlich ausgeschlossen, solange x nicht allzu groß ist, nur diejenigen ohne JavaScript werden dabei nicht erfasst.

    Sollte theoretisch klappen und annehmbar zuverlässig sein



  • Kurzum: Es gibt keine zuverlaessige Moeglichkeit im HTTP-Protokoll (serverseitig).



  • Nen Handler für das close() Ereignis schreiben?



  • heini schrieb:

    Kurzum: Es gibt keine zuverlaessige Moeglichkeit im HTTP-Protokoll (serverseitig).

    So und nicht anders ist es.



  • PRIEST schrieb:

    Nen Handler für das close() Ereignis schreiben?

    Und wie sag' ich das dann dem Server?



  • Wenn ich jetzt keinen Bullshit erzähle sollte es doch mit JavaScript möglich sein das schließen des Fensters zu unterbinden.

    Edit: Hi es gitb glaube ich ein windows event onbeforeunload oder sowas. Dort könntest du es reinsetzen.


  • Mod

    hustbaer schrieb:

    PRIEST schrieb:

    Nen Handler für das close() Ereignis schreiben?

    Und wie sag' ich das dann dem Server?

    garnicht, hoer auf árn[y]ék und heini.
    du kannst nur mit timeouts arbeiten.

    @PRIEST:
    mal abgesehen davon dass mich das ziemlich anpissen wuerde wenn sich mein browser nicht zumachen lassen wuerde, so hast du immernoch das problem der leute ohne javascript...



  • @PRIEST:
    mal abgesehen davon dass mich das ziemlich anpissen wuerde wenn sich mein browser nicht zumachen lassen wuerde, so hast du immernoch das problem der leute ohne javascript...[/quote]

    hehe, mich pissen schon weit weniger schlimme dinge im web an 😉 ... aber das wäre wohl eben eine möglichkeit. 🙂

    Und die leute ohne javascript .. ja .. ich denke mir wenn man so etwas in die programm planung einbezieht ist die zielgruppe wohl klar definiert.



  • @Shade:
    ja, werde ich eh 🙂

    ich wollte nur nachfragen, weil ich wissen will wie die "mach java-script" leute sich das vorstellen.

    ich wüsste zwar zumindest einen evtl. gangbaren weg, aber der ist auch nicht unproblematisch.



  • Das Schließen des Browsers lässt sich nicht per JS abfangen, wohl aber wenn das aktuelle Dokument (=>Tab) geschlossen wird, oder wenn von der aktuellen Seite weg navigiert wird.
    Den genauen Syntax weiß Google, Stichwörter sind onunload und onbeforeunload. Beim IE lässt sich das schließen der aktuellen Seite erfolgreich verhindern, beim FF und anderen Browsern natürlich nicht.

    Evtl. lässt sich mit Java so etwas herausfinden. Idee: Wenn die JVM heruntergefahren wird, wird auch der Browser geschlossen. Keine Ahnung ob das geht, aber es wäre vielleicht ein Ansatz.



  • Die "Anforderung" wurde gekickt, also muss ich nicht runfrickeln. *puh*

    @Headhunter:
    Danke trotzdem 🙂
    Bin aber froh dass ich mir keine weiteren Gedanken darüber machen muss.



  • Die schöne SaaS-Welt wird noch mehr so Zuegs mit sich bringen.



  • Ich hab mich damit auch schon intensiver beschäftigt und keine richtig zufriedenstellende Lösung gefunden.

    Allerdings heißt das nicht, dass es nicht geht! Ich hab ein meinem Falle einerseits das onunload-Event von JS verwendet, um ein kleines AJAX-Request zu verschicken. Das aber nur als Sicherheit, ansonsten gibt es drei Möglichkeiten, einen Timeout festzustellen:

    1. Über PHP ohne Cron, zwar zuverlässig, aber man weiß nie, wann der Timeout ausgelöst wird.

    2. PHP mit Cron

    3. Ein AJAX-Statusrequest, das per Timer sekündlich ausgelöst wird.

    Die dritte Möglichkeit ist zwar nahe an Echtzeit, aber nicht komplett zuverlässig. Wenn der Benutzer kein JS an hat, war's das auch schon. Daher gibt es nur eine Alternative (abgesehen von anderen Techniken wie Flash oder Silverlight), nämlich die Implementation mindestens einer serverseitigen PHP-Lösung in Kombination mit den Client-JavaScripts.


Anmelden zum Antworten