SESSIONS
Stefan Harder
- php
0 leo0 Stefan Harder0 leo
0 Thomas Luethi
Hi Forum,
ich experimentier gerade etwas mit Sessions in PHP herum und stosse nun auf Fragen.
Normalerweise werden ja Sessions in Cookies gespeichert (standardmäßig), so wenn ich nun Cookies deaktiviere, funktioniert meine "Anwendung" nicht mehr...
Bisher habe ich das ganze immer so gelöst....
seite1.php
-----
session_start();
$_SESSION["test"] = 0;
session_write_close();
seite2.php
---------
session_start();
echo $_SESSION["test"]++;
session_write_close();
-------------
Also nur so mal als Beispiel. Ohne Cookies funktioniert das aber nicht und nun muss ich wohl die Session Id übergeben, aber muss ich dazu wirklich bei jedem Link die Session-Id einfügen oder gibts da was, dass mir das automatisch bei relativen Links macht?
Wie macht ihr das???
Stefan
Hallo,
Hi Forum,
ich experimentier gerade etwas mit Sessions in PHP herum und stosse nun auf Fragen.Normalerweise werden ja Sessions in Cookies gespeichert (standardmäßig), so wenn ich nun Cookies deaktiviere, funktioniert meine "Anwendung" nicht mehr...
Also nur so mal als Beispiel. Ohne Cookies funktioniert das aber nicht und nun muss ich wohl die Session Id übergeben, aber muss ich dazu wirklich bei jedem Link die Session-Id einfügen oder gibts da was, dass mir das automatisch bei relativen Links macht?
Unter http://de2.php.net/manual/en/ref.session.php nach 'Passing the Session ID' und nach '--enable-trans-sid' suchen.
MfG, leo
Unter http://de2.php.net/manual/en/ref.session.php nach 'Passing the Session ID' und nach '--enable-trans-sid' suchen.
Da stehen aber einige Warnungen von Unsicherheit in der php.ini. Wenn ich diesen Punkt deaktiviert lasse, dann besteht keine andere Möglichkeit als jeder Url die Session id anzufügen???
Stef
Hallo,
Unter http://de2.php.net/manual/en/ref.session.php nach 'Passing the Session ID' und nach '--enable-trans-sid' suchen.
Da stehen aber einige Warnungen von Unsicherheit in der php.ini. Wenn ich diesen Punkt deaktiviert lasse, dann besteht keine andere Möglichkeit als jeder Url die Session id anzufügen???
Stef
Auszug aus dem Manual:
Alternativ können Sie die Konstante SID verwenden, die immer definiert ist. Falls der Client kein geeignetes Session-Cookie gesendet hat, hat sie die Form session_name=session_id. Andernfalls wird sie zu einer leeren Zeichenkette erweitert. Aus diesem Grund können Sie sie bedingungslos in URLs einbetten.
Wie du die Unsicherheiten bei der Verwendung von SID weitgehend ausschaltest ist dir überlassen. Du könntest z. Bsp. die IP des Users einer Session speichern und falls eine andere auf diese Session zugreifen will dieses verhindern.
MfG, leo
Moin!
Wie du die Unsicherheiten bei der Verwendung von SID weitgehend ausschaltest ist dir überlassen. Du könntest z. Bsp. die IP des Users einer Session speichern und falls eine andere auf diese Session zugreifen will dieses verhindern.
Diese Unsicherheit hat absolut nichts mit der Konstante SID zu tun. Es ist eine prinzipbedingte Unsicherheit von Sessions, die sich absolut nicht abschalten läßt.
Durch das manuelle Einfügen der SID-Konstante in eben nur manche, aber nicht alle Links (bei Redirects ist es sowieso zwingend erforderlich, es manuell zu erledigen) kann man lediglich sicher verhindern, dass die Session-ID per Link und/oder Referrer in falsche Hände gerät.
Die Entscheidung lautet also: Session-ID nur per Cookie, oder auch per URL? _Das_ ist die sicherheitsrelevante Frage.
Jegliches Gefrickel mit irgendwelchen IP-Adressen, oder sonstigen dubiosen, pseudo-konstanten Informationen verhindert das korrekte Funktionieren.
- Sven Rautenberg
Tach Sven
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. 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
Verlässt der User die Session, dann schreibe ich:
- Aktueller Zeitpunkt in die Vergangenheit setzen
- Zustand der Session = passiv
Bin ich ein Frickler?
Gruss und geniess den strahlblauen Himmel (ihr habt doch Sonne, oder?)
Schorsch
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
Hallo,
Ohne Cookies funktioniert das aber nicht und nun muss ich wohl die Session Id übergeben, aber muss ich dazu wirklich bei jedem Link die Session-Id einfügen oder gibts da was, dass mir das automatisch bei relativen Links macht?
Als kleine Ergaenzung erlaube ich mir den Hinweis auf die dclp-FAQ.
"Wie übergebe ich Session-IDs ohne Cookies
an eine andere Seite? Was ist Fallback?"
http://www.dclp-faq.de/q/q-sessions-fallback.html
Gruesse,
Thomas
P.S. Auch der Rest der dclp-FAQ ist lesenswert! ;-)
http://www.dclp-faq.de/