zisslaweng.de

 Home    CSS    PHP    HTML    JavaScript    Allgemein    Sitemap   exemption-filter

also mehr...

Session Daten selbst speichern.

Spätestens wenn der Wunsch nach einem Zähler für "echte" Besucher aufkommt, reicht die oben beschriebene Methode nicht. Wie unterscheidet man "single hit" und "Besucher"? Ein Seitenabruf bekommt bei erstmaliger Vergabe einer SessionID einen Zeitstempel "access". Wenn unter der gleichen SessionID weitere Seitenabrufe erfolgen, handelt es sich um einen Besucher, es wird zu diesem Datensatz ein weiterer Zeitstempel "access_end" weitergeführt.

Irgendwann entscheidet PHP, dass dieser Datensatz nicht mehr benötigt wird und führt einen Aufräum-Vorgang durch (garbage collection). Aus der Sicht von PHP ist das zwar in Ordnung, wir möchten diese Daten aber gern noch aufheben, um bei Bedarf eine statistische Auswertung durchzuführen. PHP speichert die Daten einer Session in serialisierter Form in einem temporären Verzeichnis. Da ist schlecht heranzukommen, es gibt aber die Möglichkeit, eigene Funktionen zur Datenein- und -auslagerung zu definieren.

Folgender SQL Befehl erzeugt die benötigte Tabelle:
CREATE TABLE `z_session` (
  `ord` int(11) NOT NULL auto_increment,
  `sessionid` varchar(64) default NULL,
  `access` int(14) default NULL,
  `access_end` int(14) default NULL,
  `stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP 
                           ON UPDATE CURRENT_TIMESTAMP,
  `var_php`text,
  `variables` text,
  PRIMARY KEY  (`ord`),
  UNIQUE KEY `sessionid` (`sessionid`),
  KEY `access` (`access`),
  KEY `access_end` (`access_end`)
) ENGINE=MyISAM;

Bitte beachten Sie: PHP ist genügsam und benutzt allein die Spalten sessionid und var_php, alle anderen Spalten (und wenn Sie wollen, noch viel mehr) dienen eigenen Zwecken. Das gilt auch für die folgende Klasse Session_Storage_DbMapper in der Datei z_session_storageclass.php5.

Eigene Zwecke: Wenn eine neue Session erkannt wurde, wird die globale Variable $_SERVER in der Spalte variables in serialisierter Form gespeichert. Da haben Sie dann später ausreichend Daten für eine Auswertung.

Zusätzlich ein tageweiser Besucherzähler. Der wird zwar geführt in der Tabelle z_hit (siehe Hit Counter), aber von hier aktualisiert. Der Tag wird bezeichnet mit jahr und 'tag_'.date("z",$row['access']), es ergeben sich also eindeutige Bezeichner der Art 'tag_1', ... 'tag_365' für den Zyklus eines Jahres.

Logo