Wann verfällt eine Session?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Wann verfällt eine Session?

    Hallo,

    ich habe mir ein Login gebastelt das auf sessions basiert.
    Ich habe gelesen das die sessions nach gewisser Zeit verfallen, abhängig von der Variable session.gc_maxlifetime in der php.ini.
    Dieser Wert steht bei mir auf 1440 also 24 min.
    Ich habe mich eingeloggt und abgewartet (den kompletten Browser nicht benutzt) und trotzdem war ich nach über einer Stunde immer noch eingeloggt?!
    PHP-Code:
     echo session_id(); 
    hat mir die alte Nummer ausgewiesen, wieso???


    Dann ist mir noch etwas aufgefallen was ich nicht verstehe.
    Ich habe in meinem Logout Script folgendes in die Source am Ende eingefügt:
    PHP-Code:
    session_unset();
    session_destroy(); 
    Ein anschließendes
    PHP-Code:
     echo session_id(); 
    hat mir danach auch nichts mehr ausgegeben, sobald ich aber wieder das Login aufgerufen habe (natürlich mit session_start() vorneweg) wurde mir per
    PHP-Code:
     echo session_id(); 
    wieder die alte session_id angezeigt die ja eigentlich schon zerstört war! Müsste er nicht eine neue generieren?

    Bin da jetzt ein wenig überfragt also wann verfällt so ne Session und wieso generiert er keine neue wenn die alte zerstört wurde? Mach ich was komplett falsch???
    Vielen Dank für eure Hilfe!

    Gruß
    Christiane

  • #2
    Re: Wann verfällt eine Session?

    maxlifetime heißt nicht, dass nach ablauf die session "weg" ist - sondern sie wird nur zum löschen durch den zufallsgesteuerten garbage collector freigegeben.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Danke für deine Antwort, ich habe etwas rumprobiert und vor session_start() im Login folgendes versucht (da ich keinen Zugriff auf die php.ini habe):
      PHP-Code:
      ini_set("session.gc_maxlifetime"5);
      ini_set("session.gc_probability"100); 
      wenn man session.gc_probability auf 100 setzt sollte die session beim nächsten zugriff doch zu 100% gelöscht werden? Oder muss ich erst über einen anderen PC auf die Seite zugreifen damit dieser das auslöst? Es hat sich jedenfalls nichts geändert, ich befürchte das das ini_set nicht funktioniert hat, möchte aber irgendwie verhindern das meine User nach ner halben Stunde rausfliegen.
      Nur wie kann ich das testen?

      [edit] gerade noch probiert: ich habe mich eingeloggt und eine Minute danach an einem anderen PC mit einem anderen User, bei der kurzen maxlifetime hätte der garbage collector doch zugreifen müssen? war aber nich der fall *argl*
      Zuletzt geändert von moerfi; 30.08.2005, 17:06.

      Kommentar


      • #4
        du verrenst dich in eine richtung die wenig zielführend ist.
        überlasse das löschen der physischen session-datei PHP, das macht seine aufgabe in dieser hinsicht hinreichend gut.

        wenn du willst, dass deine session nach zeit x nicht mehr nutzbar ist, regle dies anders - z.b., in dem du dir einen timestamp in die session legst, den du bei jedem zugriff erneuerst und abfragst.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Generell ist es gut und nur befürzuworten mit jedem Seitenabruf eine neue Session Id per Zufall zu generieren. Bei Cookie Authentifizierten Logins ist es leider nicht praktisch, wenn man die Sessions Id per Cookie übergibt, denn dann könnte Frameseiten zu Problemen führen.

          Aber trotzdem. Jemand findet einen Refferer Link mit ?SID=... und nutzt diesen gezielt aus, um sich Zugriff zu verschaffen. Webmaster die Protokoll schreiben, haben oft solche Links zu Gesicht bekommen.

          Wenn du mit jedem Abruf eine neue Sessions Id festlegst, ist das Risiko sehr gering.

          Zur weiteren Sicherheit empfehle ich einen 10 - 20 stelligen Zahlencode, per Zufall zu erstellen, und hinten dran, eine für dich entschlüsselbare IP der Session anhängen. Nun prüfst du noch on $REMOTE_ADDR die gleiche IP liefert, und wenn nicht, terminierst du die Session.

          Somit hast du jegliches Risiko durch Refferer Links beseitigt.

          Kommentar


          • #6
            Danke für Eure Hinweise, habe das Testen in der Richtung jetzt wirklich aufgegeben und vertraue mal meinem Garbage Collector
            Falls sich die Leute irgendwann beschweren das sie zu schnell rausfliegen kann ich immer noch in der Richtung weiter experimentieren.

            Bin übrigens umgestiegen auf das bereits vorhandene User-Management von mrhappiness (http://www.php-resource.de/forum/sho...threadid=16212), seine Class ist wirklich gut gemacht *find*
            Vorher wußte ich gar nich das sowas mit PHP geht und jetzt bin ich total begeistert (beschäftige mich seit 4 Wochen mit PHP, HTML, CSS usw usf, bin zwar manchmal total überfordert aber langsam wirds )

            Super Forum!

            Gruß
            Christiane

            Kommentar

            Lädt...
            X