Seite 1 von 1

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

Verfasst: 20.02.2006 23:57
von mgutt
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ß

Verfasst: 21.02.2006 10:10
von shwepsi
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

Verfasst: 21.02.2006 20:33
von mgutt
Javascript und damit OnClose ist doch Browserseitig. Wie soll ich diesen Befehl per PHP erkennen?

Verfasst: 21.02.2006 20:51
von Dennis63
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

Verfasst: 21.02.2006 22:13
von mgutt
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?

Verfasst: 22.02.2006 14:49
von shwepsi
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

Verfasst: 22.02.2006 16:00
von mgutt
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