Klaus: Wie feststellen, ob Session abgelaufen ist?

Hallo,

bisher starte ich jedes Script mit einem session_start() und lese dann die von mir gefüllten Felder aus.
Wenn der Benutzer die Seite neu aufgerufen hat, sind die Felder leer, aber wenn die Sitzung abgelaufen ist, sind die Felder auch leer.

Wie kann ich denn feststellen, ob die Sitzung nun abgelaufen ist?

MfG,

Klaus

  1. Hallo,

    kaum schreib ich hier die Frage, schon finde ich die Antwort...

    if (isset($_REQUEST['PHPSESSID']) AND !isset($_SESSION['User'])) {

    tut seinen Dienst.

    Trotzdem danke fürs Zuhören ;-))

    Klaus

  2. Hello,

    bisher starte ich jedes Script mit einem session_start() und lese dann die von mir gefüllten Felder aus.
    Wenn der Benutzer die Seite neu aufgerufen hat, sind die Felder leer, aber wenn die Sitzung abgelaufen ist, sind die Felder auch leer.

    Vielleicht solltest Du dir zuerst mal klar machen, dass "die Seite" immer neu aufgerufen wird. Jeder Request fängt von vorne an. Das einzige was bleibt, sind (hier) die Session-ID und die zugehörige Session-Datei, aud der dann das Array $_SESSION erstellt wird.

    Die Laufzeit einer Session solltest Du nicht einfach von der Existenz der Session-Datei abhängig machen. Diese stellt zwar im System von PHPs Sessionverwaltung die Grundlage dar, sollte aber nicht ausschließlich für die Gültigkeit der Session verantwortlich sein.

    Eine Session-Datei wird vom System irgendwann "weggeräumt". Während das Script läuft, ist dies üblicherweise nicht möglich, egal, wie lange das dauert. Die Session-Datei wird nämlich auch aus diesem Grund solange gesperrt. Der GC (Garbage Controller) nimmt Rücksicht darauf.

    Welche Art von GC aber verwendet wird, hängt von der Distribution ab. Manche Systeme verwenden dafür einen CronJob, der die INI-Daten zur Session berücksichtigt. Der ist dann zeitlich relativ exact. Andere System benutzen nur die einfache in PHP vorhandene Möglichkeit. Diese ist aber von sovielen Faktoren abhängig (unter anderem den aktuellen Zugriffszahlen per PHP), dass das "Wegräumen" der Dateien manchmal auch erst sehr verspätet stattfindet.

    Wenn Du also nur das Vorhandensein der Datei als Merkmal für die Existenz einer gültigen Session heranziehst, dann ist das eben sehr ungenau.

    Es empfiehlt sich daher, z.B. zusätzlich noch eine Datenbank für das Logging der Benutzerzugriffe einzusetzen und daraus die Gültigkeit der Session abzuleiten. Die maximale Gültigkeitdauer (aus der Datenbank) muss dabei dann kleiner sein, als die minimale Dateiexistenz der Session-Datei (session.gc_maxlifetime).

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. hi,

      Die Laufzeit einer Session solltest Du nicht einfach von der Existenz der Session-Datei abhängig machen. Diese stellt zwar im System von PHPs Sessionverwaltung die Grundlage dar, sollte aber nicht ausschließlich für die Gültigkeit der Session verantwortlich sein.

      Genau: Wozu überhaupt eine Datei auf dem Server!? Eine Session ist für die Dauer einer Browsersitzung gültig, d.h., es genügt vollkommen, dass die der Session zugeordnete Identity lediglich vom Browser (clientseitig) gespeichert wird.

      Erst dann, wenn serverseitig eine Speicherung erfolgt (Warenkorb, Login...), wird die Frage nach dem Verfallsdatum interessant. Diese Diskussion hatten wir schonmal.

      Hotti

      1. Hi,

        Genau: Wozu überhaupt eine Datei auf dem Server!? Eine Session ist für die Dauer einer Browsersitzung gültig, d.h., es genügt vollkommen, dass die der Session zugeordnete Identity lediglich vom Browser (clientseitig) gespeichert wird.

        Genau das wird die Session-*ID* ja auch – und der Client schickt sie bei jedem Request mit an den Server, damit dieser die dem Client zugeordneten serverseitig vorgehaltenen Daten identifizieren kann.

        Das ändert nichts daran, dass diese serverseitigen Daten serverseitig gespeichert bleiben (sei es in einer Datei oder sonstwo) – weil sie entweder gar nicht an den Client herausgegeben (Stichwort Manipulierbarkeit), oder nicht jedes Mal, wenn der Server sie für Berechnungen benötigt, erneut über das Schneckenprotokoll HTTP gewuchtet werden sollen.

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
        1. hi,

          Genau das wird die Session-*ID* ja auch – und der Client schickt sie bei jedem Request mit an den Server, damit dieser die dem Client zugeordneten serverseitig vorgehaltenen Daten identifizieren kann.

          Ja gut, wenn das PHP so macht, da werden sich die Entwickler schon was dabei gedacht haben. Andere Lösungen, die einfacher und vor allem kompatibel zu Responsen sind, die innerhalbe eines Frameworks nicht nur mit PHP erstellt werden, sind hier völlig induskutabel ;)

          Schöne Grüße,
          Hotti