Fenster schließen erkennen für Online Statistik / Chat

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Fenster schließen erkennen für Online Statistik / Chat

Beitrag von mgutt » 20.02.2006 23:57

Wie kann ich für einen Javachat erkennen, dass ein User online ist, wenn der Anbieter dies selbst nicht ermöglichen kann?

Ich dachte an einen kleinen IFRAME der sich selbst aktualisiert oder gibt es noch andere Möglichkeit die Anwesenheit eines Besuchers in einem Fenster herauszufinden?

gruß
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it

shwepsi
Mitglied
Beiträge: 1697
Registriert: 02.06.2003 14:37
Wohnort: NRW - immer dem Monitorleuchten folgen...
Kontaktdaten:

Beitrag von shwepsi » 21.02.2006 10:10

wenn du mit frames arbeitest könntest du mit java ja onClose in einen Frame setzen und dort eine PHP Seite reinschreiben die
  1. dann eben sagt das der User das Fenster geschlossen hat
  2. dem User einen guten Tag wünscht
  3. sich dann selber schliesst, da das vorher registriert wurde ist dann nichts zu beachten
MfG
Emma
Die Weisheit verfolgte mich sekundenlang...
Aber sie überholte mich und war fortan nicht mehr gesehen !!!

Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt » 21.02.2006 20:33

Javascript und damit OnClose ist doch Browserseitig. Wie soll ich diesen Befehl per PHP erkennen?
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it

Dennis63
Ehemaliger
Beiträge: 2597
Registriert: 02.07.2003 18:46

Beitrag von Dennis63 » 21.02.2006 20:51

mgutt hat geschrieben:Javascript und damit OnClose ist doch Browserseitig. Wie soll ich diesen Befehl per PHP erkennen?
Indem Du ein PHP-Script damit aufrufst...

Alternativ sendest Du per Java ne Art "Ping"... Das geht aber sehr auf den Server, wenn viele User den Chat offen lassen. Hatte ich bei mir das Vergnügen... 10 User haben den Chat über nacht offen gelassen. Am nächsten Tag hatte ich 10 mal so viele Hits als vorher... Zum Glück war der Chat nicht Trafficbelastend programmiert.


Grüße
Dennis

Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt » 21.02.2006 22:13

Aber ich denke ein IFRAME mit Meta:

Code: Alles auswählen

<meta http-equiv="refresh" content="60;URL=imchatonline.php">
irgendwo versteckt auf der seite würde doch nicht viel Last bedeuten.

Wie kann ich diese Seite z.B. bei der Wer ist Online Liste integrieren, so dass ich sehe, dass der User im Chat ist? Bzw. wie könnte ich in einer Tabelle abrufen wer online ist?
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it

shwepsi
Mitglied
Beiträge: 1697
Registriert: 02.06.2003 14:37
Wohnort: NRW - immer dem Monitorleuchten folgen...
Kontaktdaten:

Beitrag von shwepsi » 22.02.2006 14:49

mgutt hat geschrieben:Aber ich denke ein IFRAME mit Meta:

Code: Alles auswählen

<meta http-equiv="refresh" content="60;URL=imchatonline.php">
irgendwo versteckt auf der seite würde doch nicht viel Last bedeuten.

Wie kann ich diese Seite z.B. bei der Wer ist Online Liste integrieren, so dass ich sehe, dass der User im Chat ist? Bzw. wie könnte ich in einer Tabelle abrufen wer online ist?
naja .--- alle 60 Sekunden würde JEDER User diesen Link laden
der Chat ist vermutlich java... dann würde ich auch mit java ein on_close machen

weniger Last (nur wenn fenster geschlossen wird)
Problem : rechner stürzt ab: man wird nicht abgemeldet, da müsste man noch was finden...

aber wenn du iframe machst und dort immer eine Seite aufrufst... ist auch ok
Die Weisheit verfolgte mich sekundenlang...
Aber sie überholte mich und war fortan nicht mehr gesehen !!!

Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt » 22.02.2006 16:00

Ich habe jetzt in der constants.php das hinzugefügt:

Code: Alles auswählen

define('PAGE_CHATONLINE', -13);
dann eine neue phpBB Seite erstellt (chatonline.php) mit den Angaben im Kopf:

Code: Alles auswählen

//
// Start session management
//
$userdata = session_pagestart($user_ip, PAGE_CHATONLINE); 
init_userprefs($userdata); 
//
// End session management
//
In der .tpl vom Chat habe ich das hinzugefügt:

Code: Alles auswählen

<iframe height="1" width="1" src="chatonline.php" scrolling="no"></iframe>
erstellt habe ich noch eine chat_header.tpl wo der befehl zum neuladen enthalten ist:

Code: Alles auswählen

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html dir="{S_CONTENT_DIRECTION}">
<head>
<meta http-equiv="Content-Type" content="text/html; charset={S_CONTENT_ENCODING}">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="refresh" content="60;URL=chatonline.php">
</head>
<body>
Jetzt lädt er im Chat immer wieder die chatonline.php nach. Damit erhält die Session den Pageeintrag "-13".

EDIT:

Ok die Anzahl der Leute die Online sind, kann ich nun so auslesen, in dem ich diesen Code in einer neuen Seite hinzufüge. (meine Startseite in diesem Fall). Der Wert "- 300" ist in Sekunden, also zeigt er nur die an, die in den letzten 5 Minuten im Chat waren. Ich teste das mal, vielleicht ist es sogar besser, dass zu verkürzen)

Code: Alles auswählen

// Chat Online
$sql = "SELECT session_user_id FROM phpbb_sessions WHERE session_time >= ".( time() - 300 ) . " AND session_page = -13";
if ( !($result = $db->sql_query($sql)) )
{
	message_die(GENERAL_ERROR, "Couldn't get chatonline data", "", __LINE__, __FILE__, $sql);
}
$affectedrows = mysql_affected_rows();
$chatonline = empty($affectedrows) ? '' : $affectedrows . ' Chat-User online';
// End Mod
dann die variable in der gleichen Datei ans Template senden:

Code: Alles auswählen

// send to template
$template->assign_vars(array(
	'CHATONLINE' => $chatonline,
...
...
...
Im entsprechenden Template dann noch an der richtigen Stelle hinzugefügt:

Code: Alles auswählen

{CHATONLINE}
Und das ganze sieht man jetzt auf meiner Startseite: www.maxrev.de unter dem Chatlogo.

Wenn keiner den Chat aufgemacht hat, dann kommt auch keine Meldung an der Stelle. :D

Vielleicht hier mal einen Screenshot:
[ externes Bild ]

So gut? Oder was meint ihr :D
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it

Antworten

Zurück zu „Coding & Technik“