[3.1.6] "Wer ist online?" funktioniert nicht richtig
Forumsregeln
Bitte im Thementitel den Präfix deiner phpBB-Version angeben
Bitte im Thementitel den Präfix deiner phpBB-Version angeben
[3.1.6] "Wer ist online?" funktioniert nicht richtig
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?
Kennt jemand das Problem?
- 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
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.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
- Scanialady
- Supporter
- Beiträge: 1996
- Registriert: 23.02.2009 16:29
- Wohnort: Velbert (NRW)
- Kontaktdaten:
Re: [3.1.6] "Wer ist online?" funktioniert nicht richtig
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
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.
*Wenn das Auto in die Werkstatt soll, ist "Hier geht nix". - "Äh? Was geht denn nicht?" - "Ja NIX!" wenig hilfreich.
*Der Unterschied zwischen "Gast" und "Gastronom" liegt nicht nur in ein paar Buchstaben.
*Wenn das Auto in die Werkstatt soll, ist "Hier geht nix". - "Äh? Was geht denn nicht?" - "Ja NIX!" wenig hilfreich.
Re: [3.1.6] "Wer ist online?" funktioniert nicht richtig
Nein, kann damit nicht zusammenhängen. Denn: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
This bug is only in the latest release build 3.1.7-pl1, it's not in previous build 3.1.6.
Re: [3.1.6] "Wer ist online?" funktioniert nicht richtig
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.
Re: [3.1.6] "Wer ist online?" funktioniert nicht richtig
In der Datei viewonline.php habe ich diesen Code gefunden:
Wenn ich "$on_page" mit print_r ausgebe, bekomme ich das hier:
Sind diese Werte normal???
Code: Alles auswählen
$on_page = $viewonline_helper->get_user_page($row['session_page']);
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
)
- 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
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.
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.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Re: [3.1.6] "Wer ist online?" funktioniert nicht richtig
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?
Wie funktioniert das "Seite ermitteln" eigentlich?
- 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
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
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.
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:
werden. Das sieht aus nach 3x der gleichen Info, aber wenn eine URL oberhalb des Forums eingeht, z.B.
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
Bei Foren- und Themenseiten wird noch überprüft, ob der anzeigende User das Forum betrachten kann. Hierzu legt die Funktion
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
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.
$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);
Code: Alles auswählen
$on_page = array(
0 => 'adm/index',
1 => 'adm/index',
2 => '',
3 => 'adm/index',
);
../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.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Re: [3.1.6] "Wer ist online?" funktioniert nicht richtig
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
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
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?
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 . '
Nachtrag:
Datei includes/functions.php
Funktion "page_footer"
Code
Code: Alles auswählen
if ($display_template)
{
$template->display('body');
}
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?