Andreas Baur: Webseiten-Fenster schließen und dabei ausloggen

Hallo,

Ich habe einen Mitgliederbereich, der per login Zugang gewährt und diesen in einem neuen Tab öffnet.
ich würde gerne folgendes mit einbauen:
Wenn ich diesen neu geöffneten Tab wieder schließe, möchte ich zur Sicherheit einen logout durchführen.
Eine logout.php habe ich schon, die auch funktioniert, da ich auch natürlich einen logout-Button in dem Mitgliederbereich habe.
Da der Benutzerkreis dieser Webseite keine allzu großen Interneterfahrungen hat, möchte ich eben zur Sicherheit diesen Logout durchführen, sobald der Tab geschlossen wird.

Ich habe auch schon gesucht nach einer window.close()-operation, aber nichts gefunden,

Ich hab da zwar so ne Vorahnung, dass dies nicht möglich ist, aber evtl. ist hier ja jemand unterwegs, der dieses Problem schon einmal gelöst hat.

Wäre net, wenn derjenige mir die entsprechenden Code-Fragmente posten könnte.

Gruß
Andy

  1. Hi,

    Wenn ich diesen neu geöffneten Tab wieder schließe, möchte ich zur Sicherheit einen logout durchführen.

    du hast dieses Anliegen im Themenbereich PHP gepostet und suchst möglicherweise eine Lösung in PHP. Unter der Prämisse kann man nur sagen: Geht nicht. Es geht deshalb nicht, weil du mit einer serverseitigen Technik nicht auf clientseitige Ereignisse reagieren kannst - anders gesagt: Wenn du einen Brief schreibst, kannst du den letzten Absatz nicht davon abhängig machen, wie der Leser des Briefes nach dem Lesen des ersten Absatzes reagiert.

    Ich habe auch schon gesucht nach einer window.close()-operation, aber nichts gefunden

    Eine eingeschränkte Lösung wäre mit Javascript möglich; Javascript kennt die Eventhandler onunload bzw. onbeforeunload, die beim Schließen des Browserfensters ausgelöst werden.
    Eingeschränkt deshalb, weil Javascript nicht sicher vorausgesetzt werden kann.
    Eingeschränkt auch deshalb, weil das Konzept bereits eine Schwachstelle hat. Was ist, wenn dem eingeloggten Benutzer die Internet-Verbindung gekappt wird? Dann ist ein Logout, ob freiwillig oder erzwungen, auch nicht mehr möglich.

    Ich hab da zwar so ne Vorahnung, dass dies nicht möglich ist, aber evtl. ist hier ja jemand unterwegs, der dieses Problem schon einmal gelöst hat.

    Ich würde das Thema an deiner Stelle lieber serverseitig angehen: Markiere einen Besucher als ausgeloggt, wenn eine bestimmte Zeitlang (z.B. 15min) keine Anfragen mehr von ihm eingetroffen sind.

    Ciao,
     Martin

    --
    Der Alptraum jedes Computers:
    "Mir war, als hätte ich gerade eine 2 gesehen."
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. Moin!

      Eine eingeschränkte Lösung wäre mit Javascript möglich; Javascript kennt die Eventhandler onunload bzw. onbeforeunload, die beim Schließen des Browserfensters ausgelöst werden.

      Dann auch. Und auch sonst bei jedem Verlassen der geladenen Seite, beispielsweise durch Klicken auf einen Link.

      Es ist ziemlich aufwendig, zu erkennen, warum die Seite nun tatsächlich verlassen wird. Der klassische Timeout einer Session ist da deutlich besser.

      - Sven Rautenberg

  2. Du brauchst ein Event das beim Schließen ausgeführt wird, close() ist eine Methode. Ich glaub das Event heißt onblur, musst mal in den Events nachschauen was es da alles gibt.
    Aber das funktioniert nur wenn JS aktiv ist. Ich würd in deinem Fall lieber mit Sessions arbeiten, die irgendwann ungültig werden. Zum Beispiel wenn man seit einer bestimmten Zeit nicht mehr aktiv war. Da hast du einen Mechanismus den du selber kontrollierst, statt irgendwas das vom Browser abhängt.

    1. Hi,

      Du brauchst ein Event das beim Schließen ausgeführt wird, close() ist eine Methode. Ich glaub das Event heißt onblur

      nein; onblur reagiert, wenn das Element den Focus verliert.

      Ciao,
       Martin

      --
      Wer keiner Fliege etwas zuleide tut, darf sich nicht über die Maden im Fleisch wundern.
      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  3. Hello,

    Du befindest Dich mit Deienr Frage im Umfeld der "Client-Server"-Technologie. Das Problem der Cleint-Server-Lösung per HTTP ist, dass keine dauerhafte Verbindung zwischen Client und Server besteht, sondern der Server immer nur auf einen Request des Clients reagiert und sofort anschließend nichts mehr von ihm merkt. Per TCP besteht nur eine Verbindung zwischen Client und Server vom Beginn des Requests bis zum Ende der Response.

    siehe hierzu auch die Connection Functions von PHP
    z.B.: http://de3.php.net/manual/en/function.ignore-user-abort.php

    Du möchtest den User aber nicht direkt nach dem Ende der Response abmelden, sondern erst dann, wenn er schon eine ganze Weile die Response betrachtet hat und nun sein Fenster schließt.

    Dazu bräuchtest Du auch während der reinen Anzeigezeit im Client gelegentlich Requests an den Server, sodass dieser merkt: der Client ist noch da.

    Diese Requests kannst Du z.B. mit JavaScript auslösen oder mit einer Weiterentwicklung davon: Asynchronous JavaScript and XML.
    http://de.wikipedia.org/wiki/Ajax_(Programmierung)

    Und wenn nun länger kein AJAX-Request mehr kam vom Client, lässt Du den Server das als "ausgelooged" werten. Das ist dann eine besondere Umsetzung von Sessions, die Du ja bereits vorgeschlagen bekommen hast.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de