Andreas: phpskript mit Javascript aufrufen

Hallo Leute,

wie kann ich es machen, das beim verlassen einer Webseite noch ein PHP-Skript auf dem Server aufgerufen wird? Der Hintergrund ist folgender. Ich habe eine PHP-Anwendung an der sich die Benutzer anmelden müssen. Nun soll der Benutzer automatisch abgemeldet werden, wenn er das Browserfenster schliesst oder eine andere URL eintippt. Diese Abmeldung erfolt über die Datei logout.php.
Meine aktuelle Lösung sieht etwa so aus:

script type="text/javascript">
   function logout() {
       // Hier muss nun ein Aufruf stehen, welcher ein PHP-Skript
          (logout.php) auf dem Server ausführt um den Benutzer von
          der Anwendung abzumelden.
   }
</script>

<body onunload="logout()">
</body>

Für jede Hilfe wäre ich dankbar.

gruss Andreas

  1. Hallo Andreas,

    wie kann ich es machen, das beim verlassen einer Webseite noch ein PHP-Skript auf dem Server aufgerufen wird?

    Gar nicht.

    Nun soll der Benutzer automatisch abgemeldet werden, wenn er das Browserfenster schliesst oder eine andere URL eintippt.

    Und was ist, wenn er die Verbindung kappt, JavaScript deaktiviert oder ähnliches?

    Wenn du aber beim Verlassen eine andere Seite ansteuern willst (das location-Objekt hilft), dann ärgerst du den Besucher (er will schließlich zu Seite www.example.org und nicht zu deiner Logout-Seite).
    Alternativ könntest du auch ein Popup öffnen lassen mit deinem Logout-Script. Der Popupblocker macht aber auch das zunichte. Und selbst wenn ich gerade meinen Browser schließe, dann fände ich es reichlich gemein wenn wieder ein Fenster aufginge.

    Was spricht denn gegen einen Zugrifsschutz über .htaccess?

    Grüße
      David

    --
    >>Nobody will ever need more than 640k RAM!<<
    1981 Bill Gates
    1. Hi,

      Wenn du aber beim Verlassen eine andere Seite ansteuern willst (das location-Objekt hilft),

      Wenn *das* gehen würde ...

      dann ärgerst du den Besucher (er will schließlich zu Seite www.example.org und nicht zu deiner Logout-Seite).

      ... dann könnte man auf eine Logout-Seite weiterlenken, die ausloggt und dann zur gewünschten Seite weiterleitet - ohne, daß der Surfer davon viel mitbekommt.

      Geht aber nicht. ;-)

      Gruß, Cybaer

      --
      Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
  2. Hi,

    mit allen bekannten Einschränkungen:

    script type="text/javascript">
       function logout() {

    logout=window.open("logout.php","logoutWindow");

    }
    </script>

    <body onunload="logout()">
    </body>

    Und im logout.php dann ein self.close() im onLoad.

    Gruß, Cybaer

    --
    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
  3. Huhu Andreas

    vielleicht funktioniert es wenn Du dynamisch eine Grafikresource nachlädst.

    Also ungefähr so

    function logout()
    {
    dummy = new Image();
    dummy.src = theURL;
    }

    Wobei theURL auf Dein Skript verweist.
    Das sollte dann auch eine Grafik oder ggf. Status 204 o.ä. zurückgeben.

    Das "onunload()" oft nicht funktioniert bzw. mit gutem Grund deaktiviert ist wurde ja schon genannt.

    Viele Grüße

    lulu

    --
    bythewaythewebsuxgoofflineandenjoytheday
    1. Hallo lulu,

      klasse Idee. Funktioniert auch ganz gut. Nur dieses unload tut nicht wie es soll :-( aber das ist eine andere Baustelle.
      Vielen Dank nochmal für den Tipp.

      gruss Andreas

      Huhu Andreas

      vielleicht funktioniert es wenn Du dynamisch eine Grafikresource nachlädst.

      Also ungefähr so

      function logout()
      {
      dummy = new Image();
      dummy.src = theURL;
      }

      Wobei theURL auf Dein Skript verweist.
      Das sollte dann auch eine Grafik oder ggf. Status 204 o.ä. zurückgeben.

      Das "onunload()" oft nicht funktioniert bzw. mit gutem Grund deaktiviert ist wurde ja schon genannt.

      Viele Grüße

      lulu

      1. Hi,

        klasse Idee. Funktioniert auch ganz gut. Nur dieses unload tut nicht wie es soll :-( aber das ist eine andere Baustelle.

        Nein. Im onUnload kannst Du, wie geschrieben, ggf. mittels window.open eine neue Seite aufrufen. Du kannst aber *prinzipiell* nicht mehr Inhalte einer ja nicht mehr existenten Seite verändern.

        Beides zusammen geht halt nicht. Punkt. 8-)

        Gruß, Cybaer

        --
        Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
        1. Hallo,

          klasse Idee. Funktioniert auch ganz gut. Nur dieses unload tut nicht wie es soll :-( aber das ist eine andere Baustelle.

          Nein. Im onUnload kannst Du, wie geschrieben, ggf. mittels window.open eine neue Seite aufrufen. Du kannst aber *prinzipiell* nicht mehr Inhalte einer ja nicht mehr existenten Seite verändern.

          Ich will die Inhalte der Seite ja gar nicht mehr verändern. Die Hauptsache ist doch, dass logout.php vom Webserver ausgeführt wird. Das ist der Fall, wenn ich ein image-Objekt erstelle und  image.url="logout.php" angebe. Kurz bevor die Seite endgültig geschlossen wird, wird durch diese Anweisung noch der Logoutvorgang gestartet und alle sind happy ;-)
          Danke nochmal, an alle die auf mein Posting geantwortet haben.

          gruss Andi

          PS: Beim schliessen des Fensters hat der Trick nicht funktioniert. Das Fenster wurde geschlossen ohne das logout.php aufgerufen wurde. Die Lösung brachte eine alert('Sie wurden abgemeldet'); Anweisung nach der image.url-Zeile. Danach ging es wunderbar. Ich schätze mal, das liegt an der kurzen Verzögerung, die diese Anweisung mit sich bringt.

          1. Hi,

            Ich schätze mal, das liegt an der kurzen Verzögerung, die diese Anweisung mit sich bringt.

            Ah, nett. Und ja, das schätze ich auch. ;-)

            Gruß, Cybaer

            --
            Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!