Gizmo29: PHP Script bei onUnload ausführen???

Hallo zusammen,

ich habe ein Problem im Bezug auf PHP und onUnload. Das Problem ist folgendes:
<body bgcolor="#ffffff" onUnload="<?php online_counter('PULL');?>">

Es soll beim verlassen der Seite die eigene IP Adresse aus einer mySQL Datenbank gelöscht werden.

Dies scheint auch wunderbar bei einem Reload zu funktionieren. Wenn ich jedoch die Seite mit dem "Back" Button verlasse, wird die IP nicht gelöscht...

Bei einem Reload lässt sich das sehr gut daran beobachten, da in der mySQL Tabelle die ID (Key) der IP Row um 1 erhöht wird. (RELOAD: IP gelöscht (bei UnLoad) und IP hinzugefügt (bei Aufruf der Seite - das hab ich jetzt mal Programmiertechnisch unterschlagen ;o))

Wie gesagt, wenn ich aber mit BACK die Seite verlasse, wird wohl das Script nicht ausgeführt. Ich vermute, dass die serverseitige Ausführung des Scriptes eine niedrigere Priorität hat als das Laden einer neuen Seite. Gibt es ein Workaround, wie man dies umgehen kann?

Oder schlicht gefragt: Gibt es eine Umgebungsvariable in der die aktuelle Anzahl (oder mehr Details) der gleichzeitigen User auf einer Homepage zu finden sind?

Es wäre Klasse, wenn sich jemand meinem Problem annehmen könnte.

Gruß
Gizmo29

  1. Moin!

    ich habe ein Problem im Bezug auf PHP und onUnload. Das Problem ist folgendes:
    <body bgcolor="#ffffff" onUnload="<?php online_counter('PULL');?>">

    Es soll beim verlassen der Seite die eigene IP Adresse aus einer mySQL Datenbank gelöscht werden.

    [ ] Du weißt, wann PHP ausgeführt wird.

    Aber daran kann man ja was ändern. Also:

    PHP ist eine serverseitige Skriptsprache. Das bedeutet: Der Browser fordert eine Ressource (durch die URL eindeutig identifizierbar) vom Server an. Der Server untersucht die URL und stellt fest, daß ein PHP-Skript angefordert wurde. Er startet PHP und läßt ihn das Script laden.

    PHP führt dann den PHP-Code aus. Als Resultat entsteht eine Webseite, in der nichts mehr von PHP zu sehen ist.

    Der Webserver kriegt von PHP diese fertige Seite und schickt sie an den Browser. Der Browser interpretiert dann das enthaltene HTML und CSS, und führt eventuell eingebundenes Javascript aus. Dabei gilt das für Javascript übliche Prozedere: Erst werden alle direktn Befehle ausgeführt, nach vollständigem Laden dann noch der onload-Eventhandler, bei der Benutzung der Seite dann diverse Funktionen, und beim Verlassen der Seite dann onunload.

    Wenn du dir mal den Quellcode ansiehst, der im Browser ankommt, dann siehst du, daß dein Vorhaben nicht klappen kann.

    Aber die Frage ist, ob das überhaupt klappt.
    Du kannst onunload eine Abmeldeseite laden, die die benötigten Funktionen ausführt. Aber es ist nicht garantiert, daß diese Seite jemals geladen wird, denn:

    • Der Browser kann abstürzen
    • Javascript kann ausgeschaltet sein
    • onunload kann z.B. durch einen Werbefilter herausgefiltert werden.

    Besser ist, wenn du einen Timeoutwert oder das Eintragsdatum in die Datenbank schreibst und "bei Gelegenheit" (also nach Verstreichen einer gewissen Zeit ohne neue Aktivität des Benutzers) überflüssige Einträge löschst.

    - Sven Rautenberg

    1. N'abend,

      lesenswert dazu: http://www.dclp-faq.de/q-code-user-online.html

      Gruss, Thoralf

      1. N'abend,

        lesenswert dazu: http://www.dclp-faq.de/q-code-user-online.html

        Gruss, Thoralf

        Danke + Gruß

        Gizmo29

        ----
        Dum spiro, spero.

    2. Danke für die Mühe:

      PHP führt dann den PHP-Code aus. Als Resultat entsteht eine Webseite, in der nichts mehr von PHP zu sehen ist.

      -> Das macht nichts, da der Code einfach nur eine DB modifizieren soll. Es wird keine Ausgabe gemacht.

      ...

      Aber die Frage ist, ob das überhaupt klappt.
      Du kannst onunload eine Abmeldeseite laden, die die benötigten Funktionen ausführt. Aber es ist nicht garantiert, daß diese Seite jemals geladen wird, denn:

      • Der Browser kann abstürzen
      • Javascript kann ausgeschaltet sein
      • onunload kann z.B. durch einen Werbefilter herausgefiltert werden.

      Besser ist, wenn du einen Timeoutwert oder das Eintragsdatum in die Datenbank schreibst und "bei Gelegenheit" (also nach Verstreichen einer gewissen Zeit ohne neue Aktivität des Benutzers) überflüssige Einträge löschst.

      -> Aber wie teste ich auf ein Timeout, ohne den oberen Punkt zwei zu missachten? ("»» - Javascript kann ausgeschaltet sein")

      Vielen Dank für die Mühe und vielen Dank, Sven.
      Ich denke ich werd nicht ohne Javascript auskommen...  ;o)

      Gruß
      Gizmo29