FB18 - Das Forum für Informatik

fb18.de / Off-Topic / Hard- und Softwarefragen

PHP: Lebensdauer von Session-Objekten

PHP: Lebensdauer von Session-Objekten 2007-02-11 13:10
Popcorn
http://de.php.net/session

Ich werde aus der Doku nicht ganz schlau, ob session.gc_maxlifetime auch gleichzeitig als ein generelles Timeout dient. Das heißt, wenn die maxlifetime überschritten ist und das Session-Objekt aufgerufen wird, aber noch nicht von der Garbage Collection entsorgt wurde, wird es dann auch als ungültig erkannt? Irgendwie muss man doch ein 100%iges Server-Timeout setzen können oder muss man das tatsächlich selbst konstruieren?

Edit: Um es vorwegzunehmen: Unter Google habe ich nur Andeutungen gefunden, dass man dies selbst realisieren muss. Das fällt mir aber immer noch etwas schwer zu glauben, bzw. ich weigere mich. [img]http://www.fb18.de/gfx/24.gif[/img]

Re: PHP: Lebensdauer von Session-Objekten 2007-02-11 14:28
joda_der_weise
Sessions werden ja häufig in Verbindung mit Logins benutzt und da kannst dann ja als Timestamp oder so die Loginzeit loggen und dann nach vordefinierter Lifetime die Session killen.

Es gibt php-seitig verschiedene Variablen zur Sessionverwaltung.
Vielleicht hilft Dir aber das weiter:

http://de.php.net/manual/de/function.session-cache-expire.php

Re: PHP: Lebensdauer von Session-Objekten 2007-02-11 14:42
Anonymer User
Da php bei den sicherheitsbewussten Providern häufig meist nur als cgi eingesetzt wird, kann die Invalidierung von Sessions nur an folgenden Punkten geschehen, da kein Eventhandling möglich ist:

1. Bei einem Request selbst wird geprüft, welche Sessions abgelaufen sind und gelöscht werden müssen. Nach Benutzerberichten geschieht dies bei jedem Request mit einer definierten Wahrscheinlich NACH der Bearbeitung des Skripts.

2. Einige Packages von php setzen darüber hinaus ein cron Job auf, der (bei mir) alle 30 Minuten das entsprechende session.save_path Verzeichnis abklappert und veraltete Einträge löscht. Dies klappt nur unter der Verwendung des save_handlers "files".


Eine wenn ich nicht sonderlich schöne Lösung deines Problems wäre es also, den entsprechenden cron Job einfach häufiger zu starten. Als request gesteuerte Skriptsprache hast du ansonsten keine anderen Möglichkeiten, außer manuell die Sessions zu überprüfen/löschen. Das läuft aber letzten Endes auf die von mir vorgeschlagene Idee raus, nur dass du sie nicht zeitlich, sondern request gesteuert durchführst.

Re: PHP: Lebensdauer von Session-Objekten 2007-02-11 14:43
Anonymer User
*wieder ohne passwort unterwegs* Tzwoenn

Re: PHP: Lebensdauer von Session-Objekten 2007-02-11 15:23
joda_der_weise
Da php bei den sicherheitsbewussten Providern häufig meist nur als cgi eingesetzt wird, kann die Invalidierung von Sessions nur an folgenden Punkten geschehen, da kein Eventhandling möglich ist:

1. Bei einem Request selbst wird geprüft, welche Sessions abgelaufen sind und gelöscht werden müssen. Nach Benutzerberichten geschieht dies bei jedem Request mit einer definierten Wahrscheinlich NACH der Bearbeitung des Skripts.

2. Einige Packages von php setzen darüber hinaus ein cron Job auf, der (bei mir) alle 30 Minuten das entsprechende session.save_path Verzeichnis abklappert und veraltete Einträge löscht. Dies klappt nur unter der Verwendung des save_handlers "files".


Eine wenn ich nicht sonderlich schöne Lösung deines Problems wäre es also, den entsprechenden cron Job einfach häufiger zu starten. Als request gesteuerte Skriptsprache hast du ansonsten keine anderen Möglichkeiten, außer manuell die Sessions zu überprüfen/löschen. Das läuft aber letzten Endes auf die von mir vorgeschlagene Idee raus, nur dass du sie nicht zeitlich, sondern request gesteuert durchführst.

Kleiner, etwas effizienterer "Algorithmus" (noch aus meiner Zeit der Onlinegameprogrammierung):

Speichern der Login-Zeit
if (Login-Zeit + x Minuten erreicht)
lösche Session[gibSessionNummer()]
else
gönne User noch Zeit


Das ist effizienter als einen Cron jede Minute laufen zu lassen und auch effizienter, als jedes Mal auf die Session zugreifen zu müssen (ausser die Session ist nur ein Cookie und liegt nicht auf der Server-HDD; aber dann ist das ganze nicht mehr sicher und leicht manipulierbar!!).

Re: PHP: Lebensdauer von Session-Objekten 2007-02-11 15:27
Popcorn
Den session.cache_expire hatte ich auch schon gesehen, aber ich verstehe das weiterhin nur als Cachefunktion für den schnellen Zugriff, da PHP die Sessions standardmäßig auf der Platte lagert. Die Session selbst bleibt davon doch unberührt?

Danke ansonsten für die Hinweise wie man verfahren könnte. Das ist auch alles gar nicht mein Problem, ich habe das bisher automatisch immer mit ins serverseitige Session-Objekt geschrieben. Meine Frage ist jetzt nur, ob es so etwas vielleicht auch ganz nativ geht, ohne eigenen Code, externe PHP-Module oder Cronjobs. Halt eine PHP eigene Routine die dem entspricht, was Tzwoenn in Punkt 1 vorschlug.