[3.1.6] "Wer ist online?" funktioniert nicht richtig

Fragen rund um die Installation, Administration und Benutzung von phpBB.
Forumsregeln
Bitte im Thementitel den Präfix deiner phpBB-Version angeben
dieter99
Mitglied
Beiträge: 430
Registriert: 07.04.2005 20:09

[3.1.6] "Wer ist online?" funktioniert nicht richtig

Beitrag von dieter99 »

Ich habe mich die ganze Zeit schon gewundert, dass unter dem Link "Wer ist online?" fast alle User ständig auf "Foren-Übersicht" stehen. Jetzt habe ich mich testweise an einem zweiten Browser mit einem Testaccount eingeloggt, und bin dann in ein Thema gewechselt. Doch siehe da, unter "Wer ist online?" heißt es, der Testuser würde sich in der "Foren-Übersicht" befinden.
Kennt jemand das Problem?
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: [3.1.6] "Wer ist online?" funktioniert nicht richtig

Beitrag von gn#36 »

Mach erst mal ein Update und dann probier's noch mal, vielleicht ist das ein Bug der inzwischen behoben wurde. Ggf. kannst du noch ein paar Tage warten, dann ist evtl. 3.1.8 raus.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Benutzeravatar
Scanialady
Supporter
Supporter
Beiträge: 1764
Registriert: 23.02.2009 16:29
Wohnort: Velbert (NRW)
Kontaktdaten:

Re: [3.1.6] "Wer ist online?" funktioniert nicht richtig

Beitrag von Scanialady »

hängt möglicherweise zusammen mit

die Listen "wer ist online" werden nur nach zweimaligem aktualisieren der Seite aufgefrischt. https://tracker.phpbb.com/browse/PHPBB3-14409
Wenn von etwas kein Backup existiert, dann ist es nicht wichtig.
-
Der Unterschied zwischen "Gast" und "Gastronom" liegt nicht nur in ein paar Buchstaben.
dieter99
Mitglied
Beiträge: 430
Registriert: 07.04.2005 20:09

Re: [3.1.6] "Wer ist online?" funktioniert nicht richtig

Beitrag von dieter99 »

Mylady hat geschrieben:hängt möglicherweise zusammen mit

die Listen "wer ist online" werden nur nach zweimaligem aktualisieren der Seite aufgefrischt. https://tracker.phpbb.com/browse/PHPBB3-14409
Nein, kann damit nicht zusammenhängen. Denn:
This bug is only in the latest release build 3.1.7-pl1, it's not in previous build 3.1.6.
dieter99
Mitglied
Beiträge: 430
Registriert: 07.04.2005 20:09

Re: [3.1.6] "Wer ist online?" funktioniert nicht richtig

Beitrag von dieter99 »

Ich habe jetzt auf Version 3.1.7-pl1 aktualisiert, doch das Problem besteht immer noch. Hat jemand eine Idee?
dieter99 hat geschrieben:Ich habe mich die ganze Zeit schon gewundert, dass unter dem Link "Wer ist online?" fast alle User ständig auf "Foren-Übersicht" stehen. Jetzt habe ich mich testweise an einem zweiten Browser mit einem Testaccount eingeloggt, und bin dann in ein Thema gewechselt. Doch siehe da, unter "Wer ist online?" heißt es, der Testuser würde sich in der "Foren-Übersicht" befinden.
dieter99
Mitglied
Beiträge: 430
Registriert: 07.04.2005 20:09

Re: [3.1.6] "Wer ist online?" funktioniert nicht richtig

Beitrag von dieter99 »

In der Datei viewonline.php habe ich diesen Code gefunden:

Code: Alles auswählen

$on_page = $viewonline_helper->get_user_page($row['session_page']);
Wenn ich "$on_page" mit print_r ausgebe, bekomme ich das hier:

Code: Alles auswählen

Array
(
    [0] => app
    [1] => app
    [2] => 
    [3] => app
)
1

Array
(
    [0] => app
    [1] => app
    [2] => 
    [3] => app
)
1

Array
(
    [0] => app
    [1] => app
    [2] => 
    [3] => app
)
1

Array
(
    [0] => app
    [1] => app
    [2] => 
    [3] => app
)
1

Array
(
    [0] => app
    [1] => app
    [2] => 
    [3] => app
)
1

Array
(
    [0] => app
    [1] => app
    [2] => 
    [3] => app
)
1

Array
(
    [0] => viewtopic
    [1] => viewtopic
    [2] => 
    [3] => viewtopic
)
1

Array
(
    [0] => app
    [1] => app
    [2] => 
    [3] => app
)
1

Array
(
    [0] => app
    [1] => app
    [2] => 
    [3] => app
)
1

Array
(
    [0] => app
    [1] => app
    [2] => 
    [3] => app
)
1

Array
(
    [0] => index
    [1] => index
    [2] => 
    [3] => index
)
1

Array
(
    [0] => app
    [1] => app
    [2] => 
    [3] => app
)
1

Array
(
    [0] => app
    [1] => app
    [2] => 
    [3] => app
)
Sind diese Werte normal???
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: [3.1.6] "Wer ist online?" funktioniert nicht richtig

Beitrag von gn#36 »

Nahezu alle app Einträge gehören vermutlich zu Erweiterungen, bei denen nicht klar ist, wo der User sich befindet, weil die Erweiterung die Infos dazu nicht zur Verfügung stellen. Es gibt für diesen Fall aber keine entsprechende Ausgabe, sondern es wird die Fallbacklösung benutzt: Index. Der "viewtopic" Eintrag sollte zu der Anzeige "betrachtet Thema" o.ä. führen, alle anderen nicht.

Wenn du also bei der Ausgabe 1x "betrachtet Thema" und mehrfach "Foren Index" bekommen hast, dann funktioniert die Ausgabe vermutlich erst mal richtig. Ob die Daten richtig sind oder nicht ist aber schwierig zu beurteilen, wenn du nicht genau weißt, wo die User tatsächlich herumgeistern.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
dieter99
Mitglied
Beiträge: 430
Registriert: 07.04.2005 20:09

Re: [3.1.6] "Wer ist online?" funktioniert nicht richtig

Beitrag von dieter99 »

Ich habe jetzt testweise alle Erweiterungen deaktiviert und der Cache wurde auch gelöscht. Trotzdem verschwindet das Problem nicht. Ich verstehe die Welt nicht mehr.

Wie funktioniert das "Seite ermitteln" eigentlich?
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: [3.1.6] "Wer ist online?" funktioniert nicht richtig

Beitrag von gn#36 »

Die Daten für die Anzeige stehen in der Sessions Tabelle. Jede Seite trägt theoretisch einen anderen Wert ein, das Handling übernimmt dabei $user beim Aufruf von $user->session_begin(). Hierfür gibt es eine Methode namens extract_current_page, die die Seiteninformationen erzeugt (auf Basis des Aufrufpfads). Bei jedem Seitenaufruf wird $user->session_begin() aufgerufen. Hierbei wird der aktuelle Pfad in die Session Tabelle geschrieben.

Die viewonline.php liest diese Tabelle dann wieder aus und interpretiert die Daten. Dabei werden die Einträge ausgefiltert, die der User nicht sehen darf. Ein Eintrag in der Tabelle könnte z.B. adm/index.php?i=acp_board&mode=server sein. Aus der URL sieht man, dass der User sich im ACP befindet. phpBB muss das aber anhand der URL erst noch rausfinden. Hierfür wird die URL in der viewonline_helper zerlegt:

Code: Alles auswählen

preg_match('#^((\.\./)*([a-z0-9/_-]+))#i', $session_page, $on_page); 
Der Wert in $on_page wird zurückggegeben. Er schneidet von den Seiteninformationen alles außer den in der eckigen Klammer angegebenen Zeichen ab. Aus obiger Zeile müsste so:

Code: Alles auswählen

$on_page = array(
    0 => 'adm/index',
    1 => 'adm/index',
    2 => '',
    3 => 'adm/index',
); 
werden. Das sieht aus nach 3x der gleichen Info, aber wenn eine URL oberhalb des Forums eingeht, z.B. ../adm/index.php?x=..., dann sind die Einträge verschieden.
Der Eintrag bei Index 1 wird dann verwendet um die eigentliche Seite zu bestimmen. Dieser enthält immer den gesamten Treffer, in unserem Fall also adm/index. Hierfür wird in einer Liste nachgesehen die direkte unter der Stelle ist, die du ja schon gefunden hast. Wird der Eintrag gefunden (in unserem Fall der zweite case in der Liste), dann werden die Variablen $location und $location_url gefüllt.

Bei Foren- und Themenseiten wird noch überprüft, ob der anzeigende User das Forum betrachten kann. Hierzu legt die Funktion session_create (wird von session_begin aufgerufen) beim Eintragen der Daten auch die ID des besuchten Forums in der DB ab. Wenn nein, wird stattdessen der Foren-Index eingetragen, sonst wird das konkrete Forum aufgelistet. Sprich: Wenn ich hier in einem unserer internen Foren einen Beitrag lese oder schreibe, dann wird dir angezeigt, ich sei auf dem Index.

Wenn du die Liste durchgehst wirst du feststellen, dass es für so ziemlich jede Standardseite einen Eintrag gibt. Alles was nicht erfasst wird, wird als Index angezeigt (womit eine Menge Leute auf dem Foren-Index sind). Damit Erweiterungen ihre Location auch richtig anzeigen können gibt es direkt nach der Liste das Event core.viewonline_overwrite_location. Hiermit können die Erweiterungen prüfen, auf welcher Seite man so ist.

Wenn dir also sehr viele Leute auf dem Index angezeigt werden, dann sollte das normalerweise entweder daran liegen, dass du keine ausreichenden Rechte hast, um auf die entsprechenden Seiten zuzugreifen, oder dass sehr viele User Erweiterungen nutzen, die ihre Angaben nicht korrigieren.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
dieter99
Mitglied
Beiträge: 430
Registriert: 07.04.2005 20:09

Re: [3.1.6] "Wer ist online?" funktioniert nicht richtig

Beitrag von dieter99 »

Danke für die Aufklärung, gn#36.

Ich habe mich nun mit dem Account "User ABC" eingeloggt, habe verschiedene Themen (in verschiedene Rubriken) aufgerufen, und habe gleichzeitig die Tabelle `phpbb_sessions` beobachtet.
Ergebnis: In der Spalte `session_page` steht immer der Wert "app.php/styles/prosilver/theme/de_x_sie/stylesheet.css?assets_version=236", egal welche Seite der User "User ABC" aufgerufen hat.

Es werden also schon die falschen Werte in die Tabelle geschrieben. Ich habe daraufhin in der Datei session.php innerhalb der Methode "update_session" am Ende ein "die();" gesetzt, und siehe da, in der Datenbank erscheint der richtige Wert "viewtopic.php?f=1&p=1994".
Das heißt es wird zunächst der richtige Wert eingetragen, und anschließend nochmal mit einem falschen Wert überschrieben.
Wo wird also noch ein "UPDATE SESSION_TABLE" gemacht? Den Code

Code: Alles auswählen

'UPDATE ' . SESSIONS_TABLE . '
finde ich nur noch in der Datei user.php. Diesen Code klammerte ich schon aus, doch das bewirkt nichts.


Nachtrag:
Datei includes/functions.php

Funktion "page_footer"

Code

Code: Alles auswählen

	if ($display_template)
	{
		$template->display('body');
	}
Setze ich vor diesen Code ein "die()", dann steht in der DAtenbanktabelle phpbb_sessions` unter "session_page" der Eintrag "viewtopic.php?f=1&p=1994".
Setze ich den "die()"-Befehl nach diesen Code, erscheint "app.php/styles/prosilver/theme/de_x_sie/stylesheet.css?assets_version=228".

Wie muss ich das verstehen?
Antworten

Zurück zu „Support-Forum“