PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Sessions (Anmeldungen) protokollieren - geht das?


fab
25.09.2007, 10:27:44
Hallo zusammen,

ich bin nicht sicher, ob das (noch) ein Anfänger-Problem ist, aber ich habe die Hoffnung, dass die Lösung vielleicht eine ganz einfache sein könnte:

Ich habe einen passwortgeschützten Bereich eingerichtet. Am Eingang müssen sich die Anwender mit Passwort und Username anmelden. Diese sind in einer MySQL-DB gespeichert. Dann wird eine session gestartet, bis sich der Anwender wieder abmeldet. Soweit so gut...

Jetzt hätte ich aber zu statistischen Zwecken gerne ein paar Informationen über diese Anmeldevorgänge. Also wer hat sich wann mit welchem Passwort angemeldet, oder so. Ist das überhaupt eine Funktion von PHP oder gibt es da evtl. ein Feature direkt von MySQL. Ich weiss nicht, wie ich da grundsätzlich rangehen soll...?`

Gruß
fab

Raketenmann
25.09.2007, 10:55:55
Du könntest dir eine zusätzliche Tabelle in deiner DB anlegen, in der du die gewünschten Informationen ablegst.

Also z.B.
tab_logfile: User_ID, Aktion, Timestamp

Die User_ID bekommst du aus der Tabelle, in der die Usernames und Passwörter gespeichert sind, die Aktion speichert was gemacht wurde (1 für Anmeldung, 0 für Abmeldung) und der Timestamp ist halt ein Timestamp, kannst auch datetime oder so verwenden, um den Zeitpunkt der Aktion zu speichern.

Die Anmeldungen werden an der Stelle in die DB geschrieben, an der die Session gestartet wird (der Abgleich der Daten also erfolgreich war), die Abmeldungen dort wo die Session beendet wird (nach einem Klick auf Logout oder so).

Bedenke aber, dass sich nicht alle Benutzer ordnungsgemäß abmelden werden. Die Aussagekraft des Abmeldeprotokolls ist daher begrenzt.


Du kannst das Ganze natürlich auch zeilenweise in eine csv-Datei schreiben, um ein "echtes" Log-File zu haben.

fab
25.09.2007, 11:14:41
Hallo Raketenmann,

Danke erst mal!
Also das heisst: Auf der ersten Seite, die auf das Anmeldeformular folgt, erweitere ich mein Skript, das die session startet um ein paar Zeilen, die die jeweiligen Einträge in der DB oder dem Textfile vornehmen? Es gibt also nicht so etwas wie eine automatische Protokollfunktion, quasi in Form von Logfiles?

Gruß
fab

feuervogel
25.09.2007, 11:19:16
Es gibt also nicht so etwas wie eine automatische Protokollfunktion, quasi in Form von Logfiles?

Gruß
fab

Du glaubst, es läuft da ein Programm im Hintergrund, was errät, wie dein eigenes Loginsystem funkioniert und die Aktionen schön menschenlesbar mitloggt? Wie soll das denn bitte gehen?

Du brauchst ja bloß eine Funktion

function log(userid, action){
...
}

die user-id, aktion und zeitstempel in eine datenbank schreibt und bei jeder gewünschten aktion aufgerufen wird.

fab
25.09.2007, 14:11:41
Nicht wirklich, nein.

Die Variante, in PHP einfach an der einen Stelle die entsprechenden Werte abzuspeichern, klingt ja wirklich recht einfach. Ich dachte nur, es könnte sowas wie eine Protokollfunktion der Datenbank geben. Also eher MySQL und weniger PHP...

Acb1807
26.09.2007, 17:38:06
Hi,
Also zunächst einmal ich bin ein Newbie, also wenn ich blödsinn schreibe bitte nicht böse sein.....

Ich hab das so gelöst (könnte allerdings ein Sicherheitsrisiko darstellen, wegen der schreibbaren test.txt - das hab ich noch nicht raus):

In einer textdatei "test.txt" speiche ich mithilfe der folgenden Codes einige Daten:

$ip = getenv("REMOTE_ADDR");
$datei =fopen ("test.txt", "a");
$timestamp = time();
$datum = date("d.m.Y - H:i", $timestamp);

fwrite ($datei, $ip);
fwrite ($datei, $datum);
fclose ($datei);

Man kann natürlich auch einige vorher gesammelten Daten mit hinzupacken.

Grüße
Acb

fab
27.09.2007, 14:07:25
Danke,

ich hab's jetzt mit einer kleinen Funktion gelöst, die die Einträge entsprechend in einer neuen DB-Tabelle vornimmt:


Abfrage, ob Login korrekt war, in dem Fall:

function in_db_einfuegen( $user, $pass, $datum, $uhrzeit)
{
$anfrage = "INSERT INTO abc ( user, pass, datum, uhrzeit) values( '$user', '$pass', '$datum', '$uhrzeit')";
if ( ! mysql_query( $anfrage, $link ) )
{
$dberror = mysql_error();
return false;
}
return true;
}

und so funktioniert's jetzt auch. Ein Problem weniger...

fab

FabianWesner
27.09.2007, 14:31:29
Ich hab das so gelöst (könnte allerdings ein Sicherheitsrisiko darstellen, wegen der schreibbaren test.txt - das hab ich noch nicht raus):

Das kommt darauf an, wo sich die Datei test.txt befindet. Wenn Sie oberhalt des htdocs-Ordner liegt, kann man sie zumindestens nicht mehr mit einem Browser öffnen.

FabianWesner
27.09.2007, 14:33:23
@fab

Nicht vergessen: Passwörter speichert man NIE uncodiert! Du kannst eine One-Way Codierung wie md5() benutzen. Damit ist es unmöglich dir die Passwörter zu stibitzen.

Ausserdem würde ich dir empfehlen die Uhrzeit als SQL-Timestamp mit CURRENT_TIMESTAMP automatisch speichern zu lassen. Das hat den Vorteil, dass dir die Datenbank bei der Auswertung hilft.

fab
27.09.2007, 14:56:49
Danke. Zu CURRENT_TIMESTAMP werde ich nochmal was nachlesen. Ich verwende jetzt u.a. time(); weil man das so schön sortieren kann bei der Ausgabe.