Moin Moin!
dann hast du wahrscheinlich bei jedem deiner Scripte am Anfang eine Abfrage ob der Key im Cookie (via POST übertragen schätze ich) irgendwo in deiner DB verknüpft mit einer UID i.O. ist?!
In Pseudo-SQL:
0. create table sessions ( id varchar(100) not null primary key, user_id int not null, expire_date timestamp not null, .... )
1. delete from sessions where expire_date<now()
2. select user_id from sessions where id=?
Falls kein Ergebnis: redirect zum Login-Formular. Falls eine Zeile: Angemeldet, weitermachen. Mehr als eine Zeile: Panik.
3. update sessions set expire_date=now()+30 minutes where id=?
Dann dispatch auf die gewünschte Funktion. Falls Du Session-Daten brauchst, ändere Schritt 2 in ein nicht zählendes SELECT und überprüfe, wie viele Zeilen Dir DBI liefert. 0 => login, 1 => arbeiten, sonst => Panik.
Nach erfolgreichem Login:
Session-ID auswürfeln (NIEMALS ein vorhersagbare ID benutzen, also nicht zählen, nicht die Uhrzeit oder Prozess-ID benutzen). 20 bis 100 Buchstaben und Zahlen geben eine brauchbare Session-ID ab.
So ca. 20 mal insert into sessions (id,user_id,expire_date,...) values (?,?,now()+30 minutes,...) ausprobieren, bis es nicht mehr fehlschlägt, dabei in jeder Runde eine neue Session-ID benutzen. Nach 20 Fehlversuchen Panik.
Cookie mit der Session-ID setzen und auf die ursprünglich angeforderte Seite weiterleiten.
Ich überleg mir ob ich "nur" die uid und das mit crypt verschlüsselte passwort in das cookie speichern soll. Ich weiss, dass man mit dem salt und dem tool crack es je nach schwierigkeitsgrad leicht rel. leicht entschlüsseln kann, aber so brauch ich keinen session-key in der DB.
Ganz blöde Idee. Die DB-Abfrage brauchst Du immer, egal ob Du einen User aus der DB fischst oder einen User und eine Session. Das macht keinen Unterschied, es sei denn, Deine DB ist über einen Akustikkoppler an den Webserver angebunden. Wenn jemand den Cookie mit UID+Password und irgendeiner Verschlüsselung abgreifen kann, kommt er IMMER in das System. Die Session dagegen läuft nach kurzer Zeit ab, es ist nicht einmal nötig, zum Abmelden den Cookie zu löschen, ein simples "delete from sessions where id=?" reicht vollkommen aus.
Du kannst Dir übrigens einen Großteil der Arbeit sparen, auf CPAN gibt es jede Menge Module für die Session-Verwaltung.
Alexander
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".