phpbar.de logo

Mailinglisten-Archive

Re[2]: Sessions/Visits aus Webserver-Log per mySQL ermitteln

Re[2]: Sessions/Visits aus Webserver-Log per mySQL ermitteln

Bruno Dickhoff mysql_(at)_lists.phpcenter.de
Sat, 5 May 2001 17:17:52 +0200


Hi!

"Echte" Sessions wirst Du aus den reinen Logfiles kaum ermitteln
können, da die Datenbasis derartige -sichere- Ableitungen kaum
zulässt. Dazu reichen die Infos in den Logfiles schlicht nicht aus.

HTTP ist bekanntlich zunächst mal ein statusloses Protokoll, die
einzelnen HTTP-Get-Anfragen der Browser an die Server sind aus
HTTP-Sicht zunächst einmal Einzelaktionen.

Oft wünscht man sich als Sitebetreiber jedoch, Nutzerverhalten
analysieren zu können, nacheinander erfolgende Seitenabrufe logisch
zusammenzufassen und jeweils einem Nutzer zuzuordnen, z.B. um
Warenkörbe zuzuordnen etc. pp. Diese logische Zusammenfassung von
HTTP-Requests nennt man dann halt "Session". Was eine "Session" nun
ist, bzw. wie man ermittelt, ob die Requests zusammengehören und vom
selben Nutzer stammen, ist unterschiedlich gelöst.

Rein aus der IP-Adresse und dem zeitlichen Zusammenhang kannst Du m.E.
eine Session leider nicht zuverlässig bestimmen, da of Nutzer, die
über Proxy-Server kommen, unter derselben IP auftauchen, und aufgrund
der dynamischen IP-Vergabe durch die Provider die Wahrscheinlichkeit
zu gross ist, dass mehrere Nutzer innerhalb kurzer Zeit unter der gleichen IP surfen.

Es gibt aber bewährte Methoden zum Session-Management.

Oft macht man das schlicht mittels einfacher Session-Cookies, es
reichen speicherresidente Cookies, die nur eine Session-Lebensdauer
haben, nicht persistent gespeichert werden müssen. Die beinhalten dann
z.B. einfach eine unique Session-ID, die Du erzeugst und beim Nutzer
im Cookie ablegst. Dann kannst Du jederzeit bei einem neuen Request
den Nutzer "wiedererkennen".

Eine weitere, mittlerweile beliebtere Möglichkeit ist das
URL-rewriting. Hier wird dann kein Cookie angelegt (manche User mögen
ja auch keine Cookies), sondern die Session-ID wird beim ersten
Zugriff erzeugt (z.B. als Zufallszahl) und als zusätzlicher
Parameter bei den weiteren Requests übergeben (erkennst Du oft an
URL's wie
"http://www.einesite.de/kaufen.html?sessid=198u32491234972314980" oder
so ähnlich. Auch hier kann man dann leicht die Zuordnung des Requests
zur gerade laufenden Session vornehmen.

Beides sind jedoch Erweiterungen, die im HTTP-Protokoll so nicht
vorgesehen sind und auch i.d.R. nicht gesondert im Logfile landen. Man
realisiert das dann halt über die jeweilige Scriptsprache, die man
verwendet. Application-Server und Sprachen wie PHP haben sowas dann
auch gleich eingebaut, so dass man sich nicht selbst um's
Session-Management gross kümmern muss.

Zumindest beim URL Rewriting würde die Session-ID, da sie ja jedes Mal
mit der URL übergeben wird, m.E. im Logfile ermittelbar sein (sie
müsste ja als Teilstring bei Dir im Feld "url" stehen. Du müsstest
halt dafür sorgen, dass eine solche ID auch erzeugt und benutzt wird.
Mit "nackten" HTML-Dateien und den Standard-Logfiles ist das m.E.
nicht möglich.

Gruss,
Bruno

RF> Am Sam, 05 Mai 2001 schrieb Michael Bergbauer:
>> > Ich habe die Logfiles meines Apache mit einem Perlscript zerlegt und in
>> > eine mySQL-Tabelle "logdata" mit den folgenden Spalten importiert:
>> > 
>> > ID
>> > client
>> > zeit
>> > methode
>> > url
>> > protokoll
>> > status
>> > bytes
>> > agent
>> > referer
>> > 
>> > Somit kann ich prima nach allem möglichen abfragen. Was ich aber irgendwie
>> > nicht hinbekomme, ist eine Abfrage nach Sessions bzw. Visits. Eine Session
>> > beginnt ja mit dem Auftreten einer client-IP-Adresse, die seit einer
>> > festgelegten Zeit (z.B. 30min) vorher nicht auftrat. Das Ende der Session
>> > ist das letzte Auftreten dieser IP für die festgelegte Zeit.


---
*** Weitere Infos zur Mailingliste und MySQL unter http://www.4t2.com/mysql 



php::bar PHP Wiki   -   Listenarchive