Sven Rautenberg: SESSIONS

Beitrag lesen

Moin!

Jegliches Gefrickel mit irgendwelchen IP-Adressen, oder sonstigen dubiosen, pseudo-konstanten Informationen verhindert das korrekte Funktionieren.

Jetzt komme ich nicht mehr so ganz nach. Hast du nicht mal geschrieben, man solle nicht in erster Linie überprüfen, ob eine Session existiert, sondern deren Zustand.

Ja, habe ich gesagt. Das bezieht sich aber auf ganz spezielle Dinge.

In PHP kann nicht garantiert werden, dass die in $_SESSION gespeicherten Daten sofort mit Ablauf der maximalen Session-Lebensdauer auf dem Server gelöscht werden. Das liegt schlicht daran, dass PHP mit einer Wahrscheinlichkeitsfunktion arbeitet, um den zeitaufwendigen Prozess des Dateidatumsvergleichs nicht ständig durchführen zu müssen. Die Standardeinstellung liegt bei "1%", d.h. bei durchschnittlich einem von hundert PHP-Skriptaufrufen, die Sessions benutzen, werden die Daten gelöscht.

Daraus leitet ich folgendes ab. Kommt der User bei mir auf eine Session Seite dann werden 3 Session-Vars abgelegt:
     - Aktueller Zeitpunkt
     - IP-Adresse des Users
     - Zustand der Session = aktiv

Der aktuelle Zeitpunkt ist wichtig, damit du prüfen kannst, wann der letzte Zugriff in dieser Session erfolgte. Auf diese Weise kriegst du ein zeitexaktes Timeout hin und kannst bei Zeitüberschreitung sämtliche Sessiondaten löschen und die Session neu beginnen.

Ob du den Zustand der Session speicherst, hängt von deiner Anwendung ab. Wenn du ein Login hast, oder diverse Zustände, in denen sich ein User befinden kann, dann macht sowas durchaus Sinn.

Aber die IP-Adresse ist absolut sinnlos. Weil sich die ändern kann, auch wenn absolut derselbe User zugreift, bzw. eben doch nicht garantiert für nur einen einzigen User steht!

Bedenke: User haben dynamische IP-Adressen, oder sitzen hinter richtigen NAT-Gateways (die ordnen den Benutzern des privaten Intranets mit vielen IP-Adressen die wenigen (oder die einzige) öffentliche IP des Gateways zu), oder benutzen zwangsweise Proxyfarmen mit Load-Balancing (siehe AOL, Freenet).

Wenn du zwingend erforderst, dass deine Benutzer in einer Session immer dieselbe IP haben, dann verhinderst du bei einem gewissen Prozentsatz eine ordentliche Nutzung.

Merke: Eine IP-Adresse ist kein Garant für den identischen User! Teilweise haben mehrere User die gleiche IP, teilweise wechselt die IP des Users unvorhersehbar.

Verlässt der User die Session, dann schreibe ich:
     - Aktueller Zeitpunkt in die Vergangenheit setzen
     - Zustand der Session = passiv

Warum den Zeitpunkt in die Vergangenheit setzen? Entspricht das deiner Logik?

Überhaupt: Woher willst du wissen, dass der User die Session verläßt? Es kann dir doch passieren, dass er einfach keine weitere Seite aufruft.

Dass du, je nach den vom User übermittelten Wünschen den Session-Zustand änderst, ist ja ok.

Bin ich ein Frickler?

Naja, vielleicht nicht ganz. :)

- Sven Rautenberg

--
"Habe den Mut, dich deines eigenen Verstandes zu bedienen!" (Immanuel Kant)