session.gc_maxlifetime funktioniert nicht

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

  • session.gc_maxlifetime funktioniert nicht

    Hallo Alle!

    Ich hätte gerne, daß die Session nicht (so schnell) abläuft.

    Bei meiner Recherche bin ich oft auf

    session_cache_expire (300);
    $cache_expire = session_cache_expire();

    gestoßen, aber in irgendeinem Forum meinte einer, daß
    ich eigentlich

    ini_set('session.gc_maxlifetime',[1800]);

    meine....

    was ist richtig und wie verwendet man es?

    Es stand immer VOR session_start(), ist das korrekt?

    Vielen Dank, vorab,
    Coniaric
    Gruß, Coni
    ~~ codito ergo sum - ich code, also bin ich! ~~

  • #2
    session.gc_maxlifetime funktioniert nicht

    Hallo alle!

    Irgendwie krieg ich das nicht zum Laufen.

    Ich will die Session nach 1 Minute abgelaufen haben und mache das mit

    ini_set("session.gc_maxlifetime", time()+(1)); bzw.
    ini_set("session.gc_maxlifetime", 1);

    Trotzdem läuft sie nicht ab!

    Hab das in 2 Versionen:

    PHP-Code:
    ini_set("session.gc_maxlifetime"1);
    session_start();
    $_SESSION['id'] = $id
    und das zweite Mal steht das ini_set in einer anderen php-Datei, die einfach includet wird:


    PHP-Code:
    <?php
    include("expire.php");
    session_start();
    $id=$_SESSION['id'];
    ?>
    in der include-Datei steht

    PHP-Code:
    <?php
    ini_set
    ("session.gc_maxlifetime"time()+(1));
    ?>
    Warum also funzt das nicht? Nach Doku müßte es doch so gehen, oder?

    Danke schonmal,
    Coniaric
    Gruß, Coni
    ~~ codito ergo sum - ich code, also bin ich! ~~

    Kommentar


    • #3
      Re: session.gc_maxlifetime funktioniert nicht

      Original geschrieben von Coniaric
      Irgendwie krieg ich das nicht zum Laufen.

      Ich will die Session nach 1 Minute abgelaufen haben und mache das mit

      ini_set("session.gc_maxlifetime", time()+(1)); bzw.
      ini_set("session.gc_maxlifetime", 1);
      Das hast Du wohl nicht gelesen: "session.gc_maxlifetime spezifiziert die Anzahl der Sekunden, nach denen Daten als 'garbage' ('Müll') betrachtet und entsorgt werden."

      Trotzdem läuft sie nicht ab!
      Was verstehst Du unter "ablaufen"?

      Setze in der "abgelaufenen" Session eine Variable, die Du abfragst. PHP tritt nämlich das Session-File nicht sofort in die Tonne...

      Kommentar


      • #4
        Re: Re: session.gc_maxlifetime funktioniert nicht

        Hm...hab auch gerade gemerkt, daß es Sekunden sind, aber um so besser....

        Ablaufe: die Session soll "in die Tonne" gekloppt werden, wie Du schon sagst. Was muß ich also noch machen??

        Die Session Variable ist $ID und soll einfach nur verschwinden...
        Ich frage auf gewissen Seiten nämlich ab, ob sie gesetzt ist, wenn nicht, kann die Seite nicht aufgerufen werden.


        Original geschrieben von meikel
        Das hast Du wohl nicht gelesen: "session.gc_maxlifetime spezifiziert die Anzahl der Sekunden, nach denen Daten als 'garbage' ('Müll') betrachtet und entsorgt werden."


        Was verstehst Du unter "ablaufen"?

        Setze in der "abgelaufenen" Session eine Variable, die Du abfragst. PHP tritt nämlich das Session-File nicht sofort in die Tonne...
        Gruß, Coni
        ~~ codito ergo sum - ich code, also bin ich! ~~

        Kommentar


        • #5
          Tja, frage:

          - was liefert deiner Meinung nach time()?
          - welcher Defaultwert ist normalerweise gesetzt (in Min.)
          - wasfür einen Wert wird normalerweise eingesetzt? Tage, Stunden, Minuten, Sekunden oder Milisekunden?
          - ausserdem wofür soll es gut sein, wenn die Session nur 1 Min. lebt?

          Kommentar


          • #6
            Ganz einfach:
            time() hab ich garnicht drin, zumindest vorerst nicht, ist also irrelevant.
            Defaul ist soviel ich weiß 180, juckt aber nicht, weil ich den ja NICHT will.
            Ok, es werden Sekunden eingesetzt, weiß ich jetzt auch.
            Wofür 1 min?
            Ganz einfach, weil ich zum Testen nicht 1 Stunde warten will um zu sehen, daß es nicht funktioniert! ;-)

            Original geschrieben von asp2php
            Tja, frage:

            - was liefert deiner Meinung nach time()?
            - welcher Defaultwert ist normalerweise gesetzt (in Min.)
            - wasfür einen Wert wird normalerweise eingesetzt? Tage, Stunden, Minuten, Sekunden oder Milisekunden?
            - ausserdem wofür soll es gut sein, wenn die Session nur 1 Min. lebt?
            Gruß, Coni
            ~~ codito ergo sum - ich code, also bin ich! ~~

            Kommentar


            • #7
              Re: Re: Re: session.gc_maxlifetime funktioniert nicht

              Original geschrieben von Coniaric
              Ablaufe: die Session soll "in die Tonne" gekloppt werden, wie Du schon sagst. Was muß ich also noch machen??
              Setze in der Session eine Variable, die Gültigkeit u/o Loginstatus kennzeichnet.

              Die fragst Du "auf den Folgeseiten" einfach ab.

              Kommentar


              • #8
                Re: Re: Re: Re: session.gc_maxlifetime funktioniert nicht

                Das mache ich bereits. Die Variable ist $id und wird auf jeder Seite abgefragt. Mit der Defaulteinstellung geht auch alles, ich will eigentlich nur das Zeitlimit ändern....


                Original geschrieben von meikel
                Setze in der Session eine Variable, die Gültigkeit u/o Loginstatus kennzeichnet.

                Die fragst Du "auf den Folgeseiten" einfach ab.
                Gruß, Coni
                ~~ codito ergo sum - ich code, also bin ich! ~~

                Kommentar


                • #9
                  Re: Re: Re: Re: Re: session.gc_maxlifetime funktioniert nicht

                  Original geschrieben von Coniaric
                  >Das mache ich bereits. Die Variable ist $id und wird auf jeder Seite abgefragt.

                  Fein.

                  >Mit der Defaulteinstellung geht auch alles, ich will eigentlich nur das Zeitlimit ändern...

                  Wenn in der Session ein (wie auch immer) aussehender Status gespeichert ist, auf den Du (falls falsch) mit
                  $_SESSION = array();
                  # Update in der Userdatenbank: "Sie sind raus!"
                  oder sonstwas reagierst, kann es Dir doch Wurst wie Pelle sein, ob und wie die Zeichenkette session_id aussieht...

                  Kommentar


                  • #10
                    Re: Re: Re: Re: Re: Re: session.gc_maxlifetime funktioniert nicht

                    Ich glaube, wir reden aneinander vorbei....

                    Ich mache folgendes:
                    PHP-Code:
                    <?php
                    include("expire.php");
                    session_start();
                    $id=$_SESSION['id'];

                    if(isset(
                    $id))
                    {...
                    viel HTML...}
                    else
                    {
                    Session abgelaufen}
                    Das funktioniert prächtig, ich will lediglich die Zeit bis zum Ablauf der Session ändern, mehr nicht!




                    Original geschrieben von meikel
                    >Das mache ich bereits. Die Variable ist $id und wird auf jeder Seite abgefragt.

                    Fein.

                    >Mit der Defaulteinstellung geht auch alles, ich will eigentlich nur das Zeitlimit ändern...

                    Wenn in der Session ein (wie auch immer) aussehender Status gespeichert ist, auf den Du (falls falsch) mit
                    $_SESSION = array();
                    # Update in der Userdatenbank: "Sie sind raus!"
                    oder sonstwas reagierst, kann es Dir doch Wurst wie Pelle sein, ob und wie die Zeichenkette session_id aussieht...
                    Gruß, Coni
                    ~~ codito ergo sum - ich code, also bin ich! ~~

                    Kommentar


                    • #11
                      bzw

                      Beziehungsweise beim Start

                      PHP-Code:
                         ini_set("session.gc_maxlifetime"10);
                          
                      ini_set("session.gc_probability"100);
                      session_start();
                      $_SESSION['id'] = $id
                      Gruß, Coni
                      ~~ codito ergo sum - ich code, also bin ich! ~~

                      Kommentar


                      • #12
                        Re: Re: Re: Re: Re: Re: Re: session.gc_maxlifetime funktioniert nicht

                        Original geschrieben von Coniaric
                        Ich glaube, wir reden aneinander vorbei....
                        Das scheint mir auch so:

                        PHP-Code:
                        <?php
                        session_start
                        ();
                        $id=$_SESSION['id'];
                        if(isset(
                        $id))
                        {...
                        viel HTML...}
                        else
                        {
                        Session abgelaufen}
                        Sowas ist Unfug.

                        1. die Session_id erhälst Du über session_id()
                        2. gehört in die Session folgendes so oder so ähnlich rein:
                        PHP-Code:
                        # ...
                        session_start();
                        if (!isset(
                        $_SESSION['valid']) OR $_SESSION['valid'] === false# usw.
                        {
                        # User ist "nicht gültig
                        # Anfrage des Loginstatus (Funktion gibt true oder false zurück):
                          
                        $_SESSION['valid'] = deine_login_funktion($_POST['username'], $_POST['password']);
                        }

                        if (! 
                        $_SESSION['valid']))
                        {
                          
                        $_SESSION = array();
                          
                        session_write_close();
                          
                        header ('Location: http://'.$_SERVER['SERVER_NAME'].'/dein_login_script.php');
                          exit;
                        }
                        # ab hier sind nur noch 'geladene Gäste dabei' 
                        Das funktioniert prächtig, ich will lediglich die Zeit bis zum Ablauf der Session ändern, mehr nicht!
                        Ich hoffe, Du hast mich jetzt verstanden.

                        Wenn Du den Loginstatus auswertest, ist es uninteressant, wie lange PHP das Session_file noch "aufhebt" oder der Client die session_id per Keks oder GET/POST noch mitschickt...
                        Zuletzt geändert von meikel; 06.05.2004, 20:32.

                        Kommentar


                        • #13
                          Re: Re: Re: Re: Re: Re: Re: Re: session.gc_maxlifetime funktioniert nicht

                          >>Ich hoffe, Du hast mich jetzt verstanden.

                          Äh....ehrlich? Nein.

                          Jedenfalls brauch ich das alles doch garnicht, es FUNKTIONIERT DOCH *heul*

                          Nur eben die Zeit will ich verstellen.....
                          Gruß, Coni
                          ~~ codito ergo sum - ich code, also bin ich! ~~

                          Kommentar


                          • #14
                            Re: Re: Re: Re: Re: Re: Re: Re: Re: session.gc_maxlifetime funktioniert nicht

                            Original geschrieben von Coniaric
                            Jedenfalls brauch ich das alles doch garnicht, es FUNKTIONIERT DOCH *heul*

                            Nur eben die Zeit will ich verstellen.....
                            Wozu (verdammt noch mal)? Interessant ist der Status, ob Dein Script die Session als NEU && FALSE oder als VALID betrachten und darauf reagieren soll.

                            "garbage collection" rennt nicht sofort und im Sekundentakt los, um "zu alte" Session Files in die Tonne zu treten. Das macht das Teil erst dann, "wenn mal wenig Betrieb" ist! Ein Zustand, der auf einem "gut besuchten Server" sehr selten eintreten dürfte.

                            Kommentar


                            • #15
                              session.gc_divisor integer
                              session.gc_divisor definiert gekoppelt mit session.gc_probability die Wahrscheinlichkeit, mit der die gc (garbage collection) Routine bei jeder Initialisierung einer Session gestartet wird. Die Wahrscheinlichkeit errechnet sich aus gc_probability/gc_divisor. 1/100 bedeutet z.B., dass die GC-Routine bei jeder Anfrage mit einer Wahrscheinlichkeit von 1% gestartet wird. Grundeinstellung 100.
                              mfg
                              marc75

                              <Platz für anderes>

                              Kommentar

                              Lädt...
                              X