adis22
Goto Top

PHP Script starten wenn ein User Browser schliesst

Also in Javascript kann man mit <body onbeforeunload="ende();"> ein Script starten wenn der User den Browser schliesst, wird die Funktion ende() ausgeführt.

Meine Frage wäre, gibts so eine Funktion auch bei PHP die das gleiche machen kann.

Danke im voraus für eure Hilfe.

Content-ID: 89295

Url: https://administrator.de/contentid/89295

Ausgedruckt am: 23.11.2024 um 01:11 Uhr

16568
16568 06.06.2008 um 13:35:46 Uhr
Goto Top
Noe.

JavaScript wird vom Browser interpretiert, PHP vom Server.

Heißt also, DU mußt JavaScript in Dein PHP-Script einbauen.


Lonesome Walker
Arano
Arano 06.06.2008 um 14:37:26 Uhr
Goto Top
Hehe...

wen Javascript Client- und PHP Serverseitig ist,
wie will man die dann zusammen kriegen face-wink
(könnte für Anfänger etwas verwirrend sein, nech)

Aber mit einem AJAX-Request könnte man das evtl. machen.

Hm... "onbeforeunload" das ist ein Microsoft eigener Eventhandler oder ? Was mit den anderen Browsern ?

Ich kenne sonst noch das Event "onunload" , aber das greift schon beim verlassen der Seite, also auch beim Seitenwechsel und nicht nur beim schließen des Browsers.
Sehe gerade, "ondeforeunload" hat laut MSDN ein sehr ähnliches verhalten: http://msdn.microsoft.com/en-us/library/ms536907(VS.85).aspx
Also wirst du wohl selbst mit diesem Eventhandler nicht glücklich werden.

Wozu brauchst du das denn, vielleicht gibt es ja eine andere Möglichkeit zu erreichen was du gern hättest !?

Gruß Arano
adis22
adis22 06.06.2008 um 17:39:42 Uhr
Goto Top
Danke für eure schnelle Hilfe.
Also ich bastelle zur übungs und lernzwecken an einer Singlebörse. Nun das ein User online gegangen ist, kann ich feststellen aber wann er weg ist, da liegt das Problem.

Nu habe ich die Begriffe Sessions und Cookie auf den weg bekommen.

Habe nun ein Cookie bei jedem User der sich einloggt gesetzt, nun kommt das problem, ich schaffe es nur rauszufinnden das ich selber Online bin, aber der andere User wird als Offlin angezeigt. nun kann ich nur daraus schließen das der Server weiß das der andere User oline ist nur kann ich nicht sein Cookie auslesen. Naja jeder Anfang ist bitter, und wenn ich Sessions benutze kann ich nicht mehr durch die Seiten navigieren mit der History Buttons, warum auch immer.

Also erlich gesagt blicke ich bei dem ganzen nicht richtig durch.
Vielleicht könnt ihr ja ein PHP Anfänger mal auf den Weg helfen. Meine Größte Frage ist echt warum kann ich nur meinen Cookie lesen und von dem anderem User nicht.

MFG Adis
Arano
Arano 06.06.2008 um 18:17:36 Uhr
Goto Top
Meine Größte Frage ist echt warum kann ich nur meinen Cookie lesen und von dem anderem User nicht.
das ist ganz einfach, könntest du nämlich die Cookies von anderen lesen, könnt ich auch deine Lesen und würde so, möglicherweise an deine Tauschbörsenbenutzerdaten, Administrator Login-Daten, Homebanking, ect. kommen.
Sicher nicht gut !
Zusätzlich ist es glaube ich so, das der Browser den Cookie bei einem Seitenaufruf mit an den Server sendet. Was bedeutet, nicht der Server holt sich die Daten, sondern Du schickst sie ihm.
Schließlich bearbeitet der Server nur deine anfragen, also wen du nach Seite index.html fragst, schickt er Sie dir und das wars.


Mir fällt nur ein, das du beim einloggen bzw. wiedereinloggen beim Seitenwechsel einen Timstamp als "letzte_aktion" des Benutzers in seinem Profil in der Datenbank speicherst.

Wenn du nun wissen möchtest, ob ein Benutzer online ist, musst du nur prüfen, ob der Timestamp aus der Datenbank größer als ein ("aktueller Timestamp" - "5Min") ist.

Klar gibt das dabei Löcher in denen da nicht ganz stimmt, aber da musst du dann testen. Wenn ein Benutzerstatus z.B. ständig zwischen on- und offline wechselt, ist der Zeitwert der ein Benutzer als online gilt zu gering und muss (oder sollte/kann) erhöht werden.


Vielleicht hifts ja oder bring dich sonst wie weiter face-smile

Schönes WE
~Arano
adis22
adis22 06.06.2008 um 19:34:10 Uhr
Goto Top
Vielen dank, aber wie machen die anderen es, auch auf die weise wid du es beschreibst.
Arano
Arano 06.06.2008 um 20:24:45 Uhr
Goto Top
Ja, ich denke schon !
Irgendwie muss sich der Server ja merken welcher User Eingeloggt ist und da er selbst keine "Fragen" stellen kann bleibt ihm nichts weiter übrig.

Vielleicht ist es auch ganz sinnvoll das in einer extra Tabelle zu machen "User_id | last_action". Das kann man dann auch weiter verwenden z.B. für eine Anzeige über wie viele registrierte Benutzer online sind, dann muss man nicht die Tabelle mit den Userdaten (z.B. 10000 Datensätze) benutzen, sondern die Zweite die nur ein Teil der Benutzer enthält (z.B. 2000 Datensätze) was natürlich schneller geht.
Die müsste man dann nur mit einem Cronjob vielleicht ein oder zweimal pro Tag leeren (alles raus schmeißen wo "last_action" älter als 10 Minuten ist. Oder man macht es nur einmal (um 24 Uhr) und kann dann zusätzlich ausgeben, das Heute bereits X (=Tabelleninhalt) Mitglieder online waren.

Hm... hört sich eigentlich auch ganz praktisch an ^^

Wie gesagt, etwas anderes fällt mir nicht ein, aber ich bin jetzt auch kein Profi, eher ein anfänglicher Fortgeschrittener face-smile

Schönen Tag noch
~Tobias
adis22
adis22 06.06.2008 um 21:36:42 Uhr
Goto Top
Danke noch für die Hilfe, habe es nun so gemacht wie du es vorgeschlagen hast, habe in jede aktion des users ein Zeitstämpel gesetzt.

Nach 20 min unaktivitet wird der User offline angezeigt.

Liebe Grüße aus Berlin.