Hallo,
Es sei im Zusammenhang mit dem Speichern von Sessiondaten in der Datenbank darauf hingewiesen, dass du dir damit Race-Conditions ins Haus holst, ohne es zu wissen.
Hm, ich habe eigentlich nichts am Session Handling verändert - der Server speichert sie nach wie vor in Dateien. Die Datenbank nutze ich lediglich dazu um zusätzliche Informationen zur Nutzererkennung abzuspeichern. Damit dürfte es doch zu dem angesprochenen Problem der Race-Conditions gar nicht kommen?
Das Prüfen der IP ist schon mal keine so gute Idee. Erstens: Mehrere User können dieselbe IP haben.
Die IP ist ja nicht der einzige Bestandteil meiner Prüfung, sondern nur einer von vielen, wie z.B. User-Agent etc. (genau wie du sagtest). Der Fall, dass mehrere Personen z.B. über einen Proxy ins Netz gehen sehe ich daher als unproblematisch an, zumal sie ja im Regelfall dann auch unterschiedliche Sessions haben.
Zweitens: Ein User kann mehrere IPs haben.
Das ist mir neu. Ist es tatsächlich möglich, dass während einer Session bei jedem neuen Request eine andere IP-Adresse verwendet wird? In welchen Situationen könnte dies auftreten?
Nun ja, wer konnte auch schon damit rechnen, dass MySQL das dokumentierte Verhalten für affected_rows zeigt, und außerdem noch weniger als eine Sekunde für die Ausführung eines Querys benötigt. ;-)
Hast ja recht ;-)
Ich finde es ja eher fragwürdig, dass das Auffinden einer gespeicherten IP der einzige Beleg dafür sein soll, dass ein User eingeloggt ist, oder nicht. Die übliche Vorgehensweise wäre doch eher, dass das Skript die Sessiondaten einlädt und dort einen gespeicherten Status auffindet. Wenn der auf "eingeloggt" steht, weil zuvor die übermittelten Benutzerdaten als korrekt erkannt wurden, oder wenn die in der Session gespeicherten Benutzerdaten immer noch mit der Benutzerdatenbank übereinstimmen, sollte der Benutzer als eingeloggt erkannt werden.
Ist nicht der einzige Beleg. Wie gesagt nutze ich die Sessions "ganz normal". D.h. ich speichere in den Session-Daten zum Beispiel die User ID. Beim Seitenaufbau prüfe ich dann zunächst, ob für diese User ID in der Datenbank vermerkt ist, dass sie sich angemeldet hat (in Kombination mit den weiter oben angesprochenen Merkmalen wie User-Agent etc.).
Der Zeitpunkt der letzten Aktivität ist lediglich dann von Interesse, wenn es um die Realisierung eines sicheren Auto-Logouts bei Inaktivität geht.
Genau das mache ich ja :-) Nach einer gewissen Inaktivität des Nutzers muss er sich erneut anmelden um fortzufahren.
Viele Grüße
Mueller