AndiLeni / statistics

Statistik Addon zur Erfassung von Seitenaufrufen. Für das CMS Redaxo.
MIT License
32 stars 5 forks source link

Aufrufe eingeloggter Benutzer nicht erfassen #104

Closed goldfoot closed 1 year ago

goldfoot commented 1 year ago

Vorschlag:

Die Aufrufe im Frontend werden nicht in die Statistik genommen, wenn eine Backend-Session existiert. So ist sichergestellt, dass Redakteurinnen und andere Redaxo-Benutzerinnen die Statistik nicht verzerren wenn sie ihre eigene Webseite ansehen (z.B. um neue Inhalte zu prüfen oder ähnliches). Der Ausschluss anhand der Redaxo-Session hat den Vorteil, dass bei einem Wechsel der IP-Adresse nicht die Konfiguration angepasst werden muss und dass Nutzer über ihre Geräte hinweg von der Statistik ausgeschlossen sind (sofern sie sich überall einloggen).

AndiLeni commented 1 year ago

Hallo @goldfoot und danke für dein Feedback! Ich hatte das bereits vor einigen Wochen ausprobiert aber leider verworfen, weil es sich mit der Session nicht gut umsetzen lässt. Das Problem ist, dass die Session nicht automatisch gestartet wird im Frontend, was sie aber sein muss, um im EP abfragen zu können, ob sie existiert oder nicht.

Die Alternative die ich mir überlegt hatte war, ein Cookie setzen zu können im Backend, wodurch die Erfassung ausgeschlossen wird. Dies ließe sich natürlich leicht als Besucher machen, sodass etwaige Besucher mit bösen Absichten auch unerkannt bleiben könnten die gezielt ansetzen. Den Cookie müsste man aber natürlich auch händisch aktivieren, und eigentlich eine Tabelle mit Cookies welche dann nicht getrackt werden sollen (so macht es matomo).

Ich bin hier für Vorschläge offen, weil alle Optionen nicht sonderlich toll klingen

Siehe auch #93

goldfoot commented 1 year ago

Hallo @AndiLeni, danke für die Antwort und das AddOn! Ich habe in einigen Projekten die Funktion rex_backend_login::hasSession() verwendet, die bisher gute Dienste leistet - allerdings noch nie in einem EP, das müsste ich nochmal testen.

In diesem Fall ist ja nicht relevant, wer eingeloggt ist, sondern nur ob. Daher ist eine Abfrage mit rex::getUser(), das eine gestartete Session via rex_backend_login::createUser() voraussetzt, nicht notwendig.

Was meinst du? Ich könnte das bei Gelegenheit mal testen, hier nochmal Feedback geben und ggf. einen PR eröffnen.

AndiLeni commented 1 year ago

Sehr gerne ausprobieren und eine PR einreichen!

rex::getUser() hatte ich nicht probiert, sondern nur rex_backend_login::hasSession(). Das technische Problem mit hasSession ist folgendes: Um hasSession nutzen zu können muss die Session im Frontend irgendwann während dem Seitenaufruf gestartet worden sein. Das passiert aber im Frontend bei Redaxo nicht automatisch sondern muss manuell gemacht werden. Wurde die Session nicht gestartet, ist die Abfrage nach einer Session im EP immer "false", auch wenn der User im Backend eingeloggt ist.

goldfoot commented 1 year ago

Ich habe nochmal in den Redaxo Core Quelltext geschaut und folgende Erkenntnisse abgeleitet:

  1. Die Session wird vor Ausführen der Extension explizit via session_write_close() beendet, es ist also wirklich nicht möglich in der Extension die Session zu prüfen.
  2. In einem früheren EP, nämlich OUTPUT_FILTER könnte es funktionieren. Das wäre semantisch nicht so schön, aber sicherlich besser als ein Cookie zu setzen. Was meinst du @AndiLeni

Ich teste nochmal ein paar Fälle durch sobald ich dazu komme und gebe Rückmeldung.

AndiLeni commented 1 year ago

Danke fürs ausprobieren :)

Den EP OUTPUT_FILTER möchte ich nicht nutzen, denn er wird aufgerufen bevor der content an den Browser geschickt wird. Die Zeit von 50-500ms die die Verarbeitung der Statistik dauert wurde dadurch direkt auf die Ladezeit der Webseite aufgeschlagen werden 😕

AndiLeni commented 1 year ago

Danke fürs ausprobieren :)

Den EP OUTPUT_FILTER möchte ich nicht nutzen, denn er wird aufgerufen bevor der content an den Browser geschickt wird. Die Zeit von 50-500ms die die Verarbeitung der Statistik dauert wurde dadurch direkt auf die Ladezeit der Webseite aufgeschlagen werden 😕

goldfoot commented 1 year ago

Eventuell ist dann eine Notfall-Lösung: In OUTPUT_FILTER eine Variable setzen, die dann später in RESPONSE_SHUTDOWN ausgewertet wird. Das setzen einer Variable ist berechen- und messbar was die Performance angeht. Diese Performance-Einbußen sind meines Erachtens vertretbar, wenn dadurch die Statistik nicht verfälscht wird. Man kann die Option zum Ausschluss von eingeloggten Benutzern ja standardmäßig deaktiviert lassen.

AndiLeni commented 1 year ago

@goldfoot kannst du die 2.7 einmal testen und Rückmeldung geben, ob das funktioniert?

goldfoot commented 1 year ago

Ich habe die Versionen 2.7 und 3.0.1 unter Redaxo 5.15.1 erfolgreich getestet. Danke für die Umsetzung!