[PHP/MYSQL]Session-System für Besucher,User mit Datenbank und noch ne kleine Frage

BartTheDevil89

Devilution Media
ID: 87739
L
2 Mai 2006
3.960
103
Hallo,

ich möchte für meine Seite ein Session-System erstellen in dem ich dann diverse Daten zum User speichern kann, etc. Unter anderem eben auch wenn sich dann ein User einloggt, dass dann in dieser Session einfach die enstprechende Userid gespeichert wird. Oder würdet ihr mir von sowas abraten? Also ich hab mir das so überlegt:

1. Besucher betritt die Seite
- Überprüfen ob Session-Cookie mit Session-Id vorhanden? --> Session noch aktuell(also noch in der DB)?
- Wenn kein Cookie vorhanden oder Session nichtmehr aktuell, dann neue erstellen und die db-id in der session inkl. cookie speichern

2. alte Sessions über delete from table where timestamp < $time; (wobei time = time + 24h zum Beispiel)

Oder gibts da besser Varianten? Ziel ist es für ein CMS eben ein Sessionsystem mit den unterschiedlichen Rängen, also Besucher, User, Moderator und Administrator zu schaffen.

Dann möchte ich ebenfalls mal ne Frage stellen: Und zwar lohnt es sich ne db-class zu erstellen? Also ich kann ja mysql-Abfragen, etc. ganz normal machen, allerdings hab ich jetzt schon in vielen Systemen gesehen, dass die ne Art eigene class entwickelt haben um Fehler, etc. einfach ausgeben zu können und beispielsweise bei while immer über $bl['wert'] arbeiten zu können. Daher die Frage: Lohnt sich sowas? Und wenn ja, gibts dazu irgendwo Tipps, denn das ist leider noch vollkommenes Neuland für mich...

Dankeschön
 
Hallo,

ich möchte für meine Seite ein Session-System erstellen in dem ich dann diverse Daten zum User speichern kann, etc. Unter anderem eben auch wenn sich dann ein User einloggt, dass dann in dieser Session einfach die enstprechende Userid gespeichert wird.
so macht man das doch für gewöhnlich?

2. alte Sessions über delete from table where timestamp < $time; (wobei time = time + 24h zum Beispiel)
dann würde ja nie eine session gelöscht werden, weil time()+24 stunden immer größer als der gespeicherte timestamp sein wird ;)
also, wenn, dann time-24h oder nur time, wenn der in der db gespeicherte timestamp die endzeit der gültigkeit der session angibt.

Oder gibts da besser Varianten? Ziel ist es für ein CMS eben ein Sessionsystem mit den unterschiedlichen Rängen, also Besucher, User, Moderator und Administrator zu schaffen.
nö. du könntest, statt in der datenbank, die session auch in den php-session-variablen speichern ($_SESSION), aber das könnte bei shared webspaces zu einem sicherheitsproblem werden und mit der speicherung in der datenbank kann man die dauer der gültigkeit von sessions imo schöner angeben...

Dann möchte ich ebenfalls mal ne Frage stellen: Und zwar lohnt es sich ne db-class zu erstellen? Also ich kann ja mysql-Abfragen, etc. ganz normal machen, allerdings hab ich jetzt schon in vielen Systemen gesehen, dass die ne Art eigene class entwickelt haben um Fehler, etc. einfach ausgeben zu können und beispielsweise bei while immer über $bl['wert'] arbeiten zu können. Daher die Frage: Lohnt sich sowas? Und wenn ja, gibts dazu irgendwo Tipps, denn das ist leider noch vollkommenes Neuland für mich...

lohnt sich auf jeden fall!
erstens zum schutz vor sql-injections. statt bei jeder mysql-anfrage ein mysql_real_escape_string zu nutzen, kannst du das in der query() methode einmalig anwenden, und die problematischen werte als 2. argument übergeben:

public function query($sqlcode,$values)

mit vsprintf kannst du dann die werte in den sql-code einfügen...

2. kannst du datenbankabfragen einsparen... stell dir vor... an einer stelle im script wird in der user-tabelle beim eintrag des eingeloggten users ein wert (zum beispiel der zeitwert für die letzte aktivität) ge"updatet", an späterer stelle ein 2. wert (zum beispiel das passwort)... dazu wären 2 abfragen nötig. stattdessen könntest du in der datenbankklasse eine methode update einfügen:

public function update($id,array $values)

diese update-methode speichert erst einmal in einem privaten attribut, was geändert werden soll. erst am ende des scripts findet die update-datenbankabfrage statt.

hoffe, es war einigermaßen verständlich ;)
 
hoffe, es war einigermaßen verständlich ;)

Nein, leider nicht ganz^^...also den Sinn versteh ich schon, allerdings hab ich Probleme damit, wie ich das umsetze? Also gibts irgendwo nen guten Artikel oder ähnliches, das mir die Erstellung von ner guten DB-class mal näher bringt? :roll:

PS.: Tschuldigung, dass ich jetzt erst antworte, aber hatte in letzter Zeit leider viel zu wenig Zeit...