Ich arbeite gerade an einem Chat-System, um mich als Programmierer zu verbessern, da ich noch jung bin (17). Wenn sich ein Benutzer anmeldet, wird die Nachricht "{user} hat den Chat betreten". wird im Chat angezeigt. Wenn sich ein Benutzer abmeldet, hat die Nachricht "{user} den Chat verlassen". wird angezeigt.Wie man feststellt, wann ein Benutzer eine Seite offiziell verlassen oder betreten hat
Beide Funktionen funktionieren einwandfrei. Ich möchte aber auch feststellen, wann ein Benutzer die Seite schließt (Nachricht hinterlassen) und wann er zurückkommt (Nachricht eingeben).
Um dies zu erreichen etwas, ich folgendes:
1, auf der Haupt-Chat-Seite (chat.php), habe ich eine Sitzung namens onpage
2, wenn ein Benutzer die Blätter Seite das folgende Skript in einem onbeforeunload
Ereignisse durch AJAX (jQuery) läuft:
//setoffline.php
unset($_SESSION["onpage"]); // unset the session
if ($_POST['logout'] == "false") { // in our case, this will evaluate true
sleep(3); // halt the script for 3 seconds
if (isset($_SESSION["onpage"]) || !empty($_SESSION["onpage"]))
die();
}
}
// if continued, send the offline message
...
$_SESSION["left"] = "true";
3, das Skript ausgeführt wird, und schläft dann für drei Sekunden, bevor die Überprüfung, ob die Sitzung noch existiert (wenn der Benutzer innerhalb von drei zurück Sekunden die Sitzung wäre zurückgesetzt worden). Wenn dies nicht der Fall ist: Das Skript wird abgeschlossen, die Abwesenheitsnachricht wird gesendet und die Sitzung left
wird eingerichtet.
4, Wenn der Benutzer zurückkehrt, wird eine Onload-Funktion ausgelöst, die nach der Sitzung left
sucht. Ist dies der Fall, wird die Nachricht "Enter" gesendet und die Sitzung left
wird deaktiviert.
Das Problem:
Inzwischen bin ich sicher, dass Sie ein Problem mit meinem Algorithmus identifiziert haben. Ich sehe selbst viele Probleme. Zum einen scheint die Verwendung der sleep
Funktion nicht richtig, noch funktioniert es richtig. Es funktioniert korrekt beim Schließen der Seite (weil niemand innerhalb von 3 Sekunden zurückkehrt), aber wenn Sie aktualisieren, wird die Seite für die drei Sekunden angehalten, die ich nicht möchte. Ich möchte einfach einen Weg finden, um festzustellen, wann ein Benutzer offiziell die Seite verlassen und konjugiert auf die Seite zurückgekehrt ist.
Ist Ihnen bewusst, dass jeder Benutzer seine eigene Sitzung hat? – delueg
Das ist nicht das Problem. Wenn ein Benutzer die Seite schließt, wie wird die Tatsache, dass jeder Benutzer eine eigene Sitzung hat, dazu beitragen, dass mein Benutzer benachrichtigt wird, dass der Benutzer den Chat verlassen hat? @delug – Shawn31313
Wie aktualisierst du den Browser, wenn eine neue Chat-Nachricht eingeht? Eine Art Umfrage? Vielleicht könnten die Abrufdaten auch eine Liste von Benutzern zurückgeben, die im Chat angemeldet sind. Dann können Sie überprüfen, welche den Chat verlassen haben. (Verwenden Sie onbeforeunload, um einen Befehl zum Anmelden des Benutzers zu senden, oder markieren Sie ihn als den Chat verlassen). –