zisslaweng.de

 Home    CSS    PHP    HTML    JavaScript    Allgemein    Sitemap   exemption-filter

..und einige Erklärungen dazu.

Wie wird diese Klasse PHP bekannt gemacht? Der Konstruktor der Klasse SessionClass (siehe endlich, die Session) wird vor session_start() erweitert um:
session_module_name("user");
$this->S = new Session_Storage_DbMapper();
....
session_start();

Mit session_module_name('user') wird der interne Handler abgeschaltet und mit new Session_Storage_DbMapper() wird die neue Klasse instanziiert. Der Konstruktor übergibt mit session_set_save_handler() (siehe Session_Storage_DbMapper) die Adressen der alternativen Methoden in einem Array.


 9.1.2019 Beachten Sie die durchgestrichenen Zeilen. Bis zur php Version 5.6.x funktionierte der Code. Erklärungen finden Sie über den folgenden Link.


Überflüssig zu erwähnen: Sie benötigen die bereits bekannten Klassen BaseDbMapper, SessionClass und die Definitionen in z_globals.php5.

Zur Erinnerung: für PHP sind nur die Spalten sessionid und var_php relevant, alles weitere dient "eigenen Zwecken". Die Methoden z_open() und z_close() müssen nichts tun, z_write() und z_read() schreiben oder lesen für PHP die Werte aus var_php. Zusätzlich: falls die Session neu ist, Speicherung der Startzeit in "access" und des Arrays "$_SERVER" in "variables", wenn die Session bereits existiert wird nur die Endzeit "access_end" fortgeschrieben.

In z_destroy() werden die Daten jetzt nicht etwa gelöscht (PHP erwartet als Rückgabewert TRUE, nichts weiter) sondern durch sessionid = NULL für PHP als nicht existent markiert. Und falls access_end gesetzt ist, wird der Tages(besucher)zähler sowie der Gesamt(besucher)zähler jeweils incrementiert, das war's doch, was wir wollten.

Das große Aufräumen

Wesentlich mehr Aufwand jetzt in der Methode z_gc(), die garbage collection. PHP erwartet wieder nichts (ausser TRUE), Datensätze mit gesetzter sessionid und access_end älter als 600 Sekunden gelten als abgelaufen, werden gezählt und sessionid = NULL gesetzt. Single Hits (access_end = NULL) älter als 600 Sekunden und Datensätze älter als 30 Tage werden komplett gelöscht.
Wenn Sie sich die verbliebenen Datensätze ansehen: ein guter Überblick über die letzten 30 Tage. In var_php geben die boolschen Variablen Auskunft, welche Seiten ein Besucher jeweils angesehen hat, in variables wartet viel Informatives nur auf ihre Auswertung.

Ein kleines Problem bei der garbage collection. Per default wird diese Routine bei jedem hundertsten Seitenabruf angesprochen. Das ist aber ein statistischer Wert, man kann sich so exakt nicht darauf verlassen. Bei Webseiten mit geringer Besucherzahl kann es also durchaus mehrere Tage bis zum Aufruf dauern. Sie können die Routine selbst aufrufen:
$Session->S->z_gc(0);
Entweder Sie warten, bis PHP das für Sie erledigt ...oder pfuschen Sie PHP ins Handwerk. Überlegen Sie sich den Einbau einer Routine, die dafür sorgt, dass die Methode täglich einmal aufgerufen wird.
Möglicherweise haben Sie schon längst Ideen für eine weitere Auswertung.
Deshalb schon mal "bis hier" die benötigten Dateien zum download und zum studieren. Sessiondaten speichern in der Version vom 09.01.19 12:46
Es folgt eine Besucherstatistik und, grafisch aufbereitet, der Besucherzähler.
Logo