Session, wahrscheinlich die x-te

c-bob

Grünschnabel
Hallo Tutoristen!

Mein Problem ist möglicherweise so einfach, dass die Frage noch niemand gestellt hat, zumindest habe ich hier noch nicht wirklich eine Antwort gefunden.

Es geht mir ganz einfach um die Erklärung, wie das genau mit den Sessions unter PHP funktioniert. Ich habe bisher noch keine einheitliche Definition einer Session als solches finden können.
Wie lange dauert denn nun eine Session?
Zwischen welchen Partnern existiert sie genau? Browser (Client) <-> Server, Browser <-> Seite, Browser <-> session_start()/session_unset() ?
Wie lange bleibt ein Sessioncookie im Browser, wenn er nicht manuell gelöscht wird?
Was passiert, wenn ein Browser einfach geschlossen wird mit den sessionvarialblen auf dem Server?
Wie sicher kann man mit Sessions bzw. den Sessionvariablen arbeiten, wenn man sozusagen einen "Einmalvorgang" macht, also sprich, der User kommt auf den Server, füllt auf diversen Seiten desselbigen verschieden Formulare aus und beendet dann alles ordnungsgemäß? Bleibt Cookie noch erhalten, oder wird der automatisch bei _unset gelöscht?!​
Fragen über Fragen - ich hoffe, die sind nicht so trivial, dass Ihr mich nun auslacht..
Grüße
-C-
 
Wie lange dauert denn nun eine Session?
Eine Sitzung ist so lange gültig, bis beim Aufruf des Garbage Collector die letzte Änderung der Sitzungsdaten länger als session.max_lifetime Sekunden her ist. Der Garbage Collector wird allerdings nur in „session.gc_probability/session.gc_divisor*100“ Prozent aller Aufrufe der session_start()-Funktion gestartet.

Zwischen welchen Partnern existiert sie genau? Browser (Client) <-> Server, Browser <-> Seite, Browser <-> session_start()/session_unset() ?
Eine Sitzung ist eine künstliche Verbindung zwischen Server und Client, wobei der Server die Sitzungsdaten speichert und die Sitzung des Client anhand der vom Client übergebenen Sitzungs-ID identifizieren kann.

Wie lange bleibt ein Sessioncookie im Browser, wenn er nicht manuell gelöscht wird?
Sitzungs-Cookies sind per Definition nur während einer Browser-Sitzung gültig, werden also spätestens gelöscht, wenn der Browser geschlossen wird.

Was passiert, wenn ein Browser einfach geschlossen wird mit den sessionvarialblen auf dem Server?
Der Garbage Collector kümmert sich darum, dass auf lange Sicht keine Dateileichen zurückbleiben. Bis dahin bleiben sie aber noch bestehen.

Wie sicher kann man mit Sessions bzw. den Sessionvariablen arbeiten, wenn man sozusagen einen "Einmalvorgang" macht, also sprich, der User kommt auf den Server, füllt auf diversen Seiten desselbigen verschieden Formulare aus und beendet dann alles ordnungsgemäß? Bleibt Cookie noch erhalten, oder wird der automatisch bei _unset gelöscht?!
Sitzungsdaten sind, da sie auf dem Server gespeichert werden, nur von diesem direkt manipulierbar. Die in einer Sitzung gespeicherten Daten sind also sicher.
 
Danke Gumbo, für die schnellen Antworten!

Allerdings bleiben mir noch ein paar Fragen offen:
Eine Sitzung ist so lange gültig, bis beim Aufruf des Garbage Collector die letzte Änderung der Sitzungsdaten länger als session.max_lifetime Sekunden her ist. Der Garbage Collector wird allerdings nur in „session.gc_probability/session.gc_divisor*100“ Prozent aller Aufrufe der session_start()-Funktion..

Okay, soweit so gut. Die Sitzung ist (bei mir also nach ner halben Stunde) also ungültig und laut Debian-Einstellungen mittels cron-job auch vom Server gelöscht. Dann existiert aber immernoch das Cookie Client-seitig. Wenn ich nun die Seite ein weiteres mal aufrufe, dann wird also eine neue Sitzung gestartet, welche aber die die gleiche SessionID hat, wie die vorhergehende. Ist ja aber prinzipiell nicht schlimm, da ja die Sessionvariablen eh gelöscht wurden. Oder gibt es da noch andere Dinge, auf die man achten sollte?!
Mir fällt da sowas ein, wie: erst auf vorhandensein einer Sessionvariablen prüfen, bevor man sie nutzt, da sie ja beim längeren offenhalten eines Browserfensters trotzdem Serverseitig gelöscht werden könnte?!

Eine Sitzung ist eine künstliche Verbindung zwischen Server und Client, wobei der Server die Sitzungsdaten speichert und die Sitzung des Client anhand der vom Client übergebenen Sitzungs-ID identifizieren kann.

Hm... Warum muss ich aber dann auf jeder Seite, die ich auf meinem Server anspreche wieder ein neues "session_start()" ausführen, um an die Sessionvariablen heran zu kommen?!
Und an welcher Stelle sollte man dann ein session_unset machen?
 
Mir fällt da sowas ein, wie: erst auf vorhandensein einer Sessionvariablen prüfen, bevor man sie nutzt, da sie ja beim längeren offenhalten eines Browserfensters trotzdem Serverseitig gelöscht werden könnte?!
Genau. Das müsstest du selbst implementieren. Gleichzeitig kannst du damit auch eine striktere Gültigkeit durchsetzen und auch die Sitzungs-ID in regelmäßigen Abständen austauschen.

Warum muss ich aber dann auf jeder Seite, die ich auf meinem Server anspreche wieder ein neues "session_start()" ausführen, um an die Sessionvariablen heran zu kommen?!
Erst nachdem session_start() aufgerufen wurde, wird der Sitzungsmechanismus gestartet, damit also geprüft, ob eine gültige Sitzungs-ID übergeben wurde und die Sitzungsdaten geladen sowie am Ende der Laufzeit des Skriptes wieder gespeichert. Dies hat den Grund, da Sitzungen ja nicht immer benötigt werden.

Und an welcher Stelle sollte man dann ein session_unset machen?
Die session_unset()-Funktion wird benötigt, wenn du die Sitzungsdaten sofort löschen möchtest. (Für die Laufzeit des Skriptes sind die Daten in $_SESSION allerdings noch vorhanden.)
 

Neue Beiträge

Zurück