Warum wird die Session gelöscht?

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

  • Warum wird die Session gelöscht?

    Hallo zusammen,

    warum werden meine Sessiondaten nach ca. 30 Min. gelöscht?

    Ich starte mit sessiontest.php und gehe dann weiter zu sessionwarten.php. Lasse ich diese Seite ~30 Min. im Browser stehen und aktualisiere sie: Ergebnis -> alle Sessiondaten sind weg.

    sessiontest.php
    Code:
    <?php
    session_start();
    $_SESSION['variable_1'] = "Hallo";
    $_SESSION['variable_2'] = "Die_Zweite_123";
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>Sessiontest</title></head>
    <body>
    <h1>Session starten!?</h1>
    <br><pre>
    <?php var_dump(session_get_cookie_params()); ?>
    <br><br>
    <?php var_dump($_SESSION); ?>
    </pre>
    <p><br><br><a href="sessionwarten.php">Weiter zur Warteseite</a></p>
    </body>
    </html>
    sessionwarten.php
    Code:
    <?php session_start(); ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>Sessiontest</title>
    </head>
    <body>
    <h1>Ist die Session noch da?</h1>
    <br><pre>
    <?php var_dump(session_get_cookie_params()); ?>
    <br><br>
    <?php var_dump($_SESSION); ?>
    </pre>
    <p><br><br><a href="sessiontest.php">Session starten</a></p>
    </body>
    </html>
    Woher kommt das Timeout nach ~30Min.? session.gc_maxlifetime steht doch auf 86401!!
    Grüße
    Ludwig

  • #2
    Und bei Werten unter 30 Minuten sind die Daten noch da ? Ich sehe nirgends dass du an sessionwarten.php die Session ID übergeben würdest. Also müsste dann wohl ein Session Cookie übergeben werden. Hast du in den Cookies deines Browsers denn eins von deiner Domain ?

    Gruss

    tobi
    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

    Kommentar


    • #3
      Danke für die Unterstützung.
      Original geschrieben von jahlives
      Und bei Werten unter 30 Minuten sind die Daten noch da ?
      Ja.
      Original geschrieben von jahlives Ich sehe nirgends dass du an sessionwarten.php die Session ID übergeben würdest. Also müsste dann wohl ein Session Cookie übergeben werden. Hast du in den Cookies deines Browsers denn eins von deiner Domain ?
      Die Ausgabe des Skripts im Browser ist:
      Code:
      array(4) {
        ["lifetime"]=>
        int(0)
        ["path"]=>
        string(1) "/"
        ["domain"]=>
        string(0) ""
        ["secure"]=>
        bool(false)
      }
      
      array(2) {
        ["variable_1"]=>
        &string(5) "Hallo"
        ["variable_2"]=>
        &string(14) "Die_Zweite_123"
      }
      Ich kapier das nicht. session.auto_start steht auf off. Also müssten die Sessiondaten doch eigentlich, ohne Übergabe einer Session-ID gleich beim Verlassen der Seite weg sein, oder?

      FG
      Ludwig

      Kommentar


      • #4
        session.auto_start heißt nur, dass du nicht jedes mal zu beginn session_start() in dein script schreiben musst..

        Die Session wird entweder per URL übergeben oder halt im Cookie!

        Kommentar


        • #5
          Ich habe jetzt mal das Skript sessionwarten.php um die Anzeige des Sessionnamens und der -Id ergänzt und erhalte dann folgende Ausgabe:
          Code:
          SessionName: PHPSESSID
          Session_ID: cb1a8d49261b0e151adedb4b7e09509d
          
          array(4) {
            ["lifetime"]=>
            int(0)
            ["path"]=>
            string(1) "/"
            ["domain"]=>
            string(0) ""
            ["secure"]=>
            bool(false)
          }
          
          
          array(2) {
            ["variable_1"]=>
            &string(5) "Hallo"
            ["variable_2"]=>
            &string(14) "Die_Zweite_123"
          }
          Das sollte doch so ok sein, oder? Wer beendet denn nun die Session?
          Bei "lifetime"=0 sollte die Session doch bis zum Schliessen des Browsers Gültigkeit haben...

          FG
          Ludwig

          Kommentar


          • #6
            Original geschrieben von ludwig33
            warum werden meine Sessiondaten nach ca. 30 Min. gelöscht?
            Nach all den weisen Antworten noch die naive, dumme: weil session.gc_maxlifetime einen defaultwert von "1440" (Sekunden) hat, oder ungefähr 24 Minuten.

            EDIT:
            Es könnte ein anderes Skript im gleichen namespace ablaufen, welches den defaultwert verwendet?


            EDIT:
            noch eines: wie wäre es mit session.gc_maxlifetime von "120", von "3600", um zwei Eckwerte zu haben?
            Zuletzt geändert von jhaase; 18.08.2006, 11:04.

            Kommentar


            • #7
              Original geschrieben von jhaase
              Nach all den weisen Antworten noch die naive, dumme: weil session.gc_maxlifetime einen defaultwert von "1440" (Sekunden) hat, oder ungefähr 24 Minuten.
              Im ersten Posting von mir ist die php.ini abgebildet. Dort steht session.gc_maxlifetime=86401. Da ich nirgends mit ini_set etwas ändere solte das doch gelten, oder?
              Original geschrieben von jhaase
              EDIT:
              Es könnte ein anderes Skript im gleichen namespace ablaufen, welches den defaultwert verwendet?
              Das verstehe ich nicht. Bedeutet gleicher Namespace gleiche Domain?
              Dieses Testverzeichnis liegt auf einem Server der ein größeres Forum bereitstellt. Kann es sein, dass Skripte von dort meine Session beeinflussen?

              FG
              Ludwig

              Kommentar


              • #8
                Original geschrieben von ludwig33
                Im ersten Posting von mir ist die php.ini abgebildet. Dort steht session.gc_maxlifetime=86401. Da ich nirgends mit ini_set etwas ändere solte das doch gelten, oder?
                Vielleicht ändert ein anderer Benutzer auf dem Server aber die Einstellung, bzw. vielleicht wurde sie für ihn geändert.

                Und wenn dann noch die Session-Dateien von beiden im selben Verzeichnis abgelegt werden (/tmp laut deinen Bildchen) - dann schlägt da auch der GC von den Session-Scripten des anderen Benutzers getriggert zu, mit dessen maxlifetime-Einstellungen. Und von wem irgendwelche Session-Dateien stammen, das interessiert den GC nicht die Bohne.
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  Original geschrieben von wahsaga
                  Vielleicht ändert ein anderer Benutzer auf dem Server aber die Einstellung, bzw. vielleicht wurde sie für ihn geändert.

                  Und wenn dann noch die Session-Dateien von beiden im selben Verzeichnis abgelegt werden (/tmp laut deinen Bildchen) - dann schlägt da auch der GC von den Session-Scripten des anderen Benutzers getriggert zu, mit dessen maxlifetime-Einstellungen. Und von wem irgendwelche Session-Dateien stammen, das interessiert den GC nicht die Bohne.
                  Ich denke jetzt kommen wir der Sache näher.
                  Was kann ich dagegen tun? Die Boardsoftware möchte ich lieber in Ruhe lassen. Kann ich vor dem Start meiner Session Parameter für mich setzen?

                  FG
                  Ludwig

                  Kommentar


                  • #10
                    Original geschrieben von ludwig33
                    Was kann ich dagegen tun?
                    Am einfachsten wäre es wohl, deine Session-Dateien in einem eigenen Verzeichnis ablegen zu lassen, wo dir kein anderer (bzw. der durch die Scripte eines anderen Nutzers auf dem Server getriggerte GC) "dazwischenfunken" kann.
                    (Falls dieses Verzeichnis innerhalb des per HTTP abrufbaren Verzeichnisbaumes liegen sollte, entsprechenden Schutz nicht vergessen.)
                    Kann ich vor dem Start meiner Session Parameter für mich setzen?
                    Welche Session-Optionen wie und wo einstellbar sind, steht im Manual.
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      Prima, vielen Dank.

                      Muss ich jetzt session.save_path und/oder session.cookie_path vor dem Start meiner Session setzen?

                      FG
                      Ludwig

                      Kommentar


                      • #12
                        Original geschrieben von ludwig33
                        Muss ich jetzt session.save_path und/oder session.cookie_path vor dem Start meiner Session setzen?
                        Es wäre schön, wenn du dir nicht alles vorkauen lässt, sondern auch ein bisschen selber mitdenkst!

                        Überleg mal, welche der beiden genannten Einstellungen sich worauf auswirkt ...
                        I don't believe in rebirth. Actually, I never did in my whole lives.

                        Kommentar


                        • #13
                          Original geschrieben von wahsaga Und wenn dann noch die Session-Dateien von beiden im selben Verzeichnis abgelegt werden (/tmp laut deinen Bildchen) - dann schlägt da auch der GC von den Session-Scripten des anderen Benutzers getriggert zu, mit dessen maxlifetime-Einstellungen. Und von wem irgendwelche Session-Dateien stammen, das interessiert den GC nicht die Bohne. [/B]
                          dann könnte ja jemand per ini_set() den ganzen server für die session-nutzung lahmlegen!?

                          Kommentar


                          • #14
                            Original geschrieben von 3DMax
                            dann könnte ja jemand per ini_set() den ganzen server für die session-nutzung lahmlegen!?
                            Jein.

                            Wenn alle ein gemeinsames Verzeichnis für die Sessiondateien nutzen, dann wohl schon. gc_maxlifetime runtersetzen, gc_probability auf 100 rauf - und dann ein eigenes, Session benutzendes Script ein paar mal aufrufen ...

                            Aber einen Server, auf dem alle Nutzer das gleiche Session-Verzeichnis nutzen, würde ich sowieso als grob fehlkonfiguriert bezeichnen.
                            Das gehört innerhalb des Nutzerverzeichnisses gelegt.
                            I don't believe in rebirth. Actually, I never did in my whole lives.

                            Kommentar


                            • #15
                              Original geschrieben von wahsaga
                              Es wäre schön, wenn du dir nicht alles vorkauen lässt, sondern auch ein bisschen selber mitdenkst!
                              Sorry

                              Ich habe nun session_save_path() genutzt, da ja nicht das Cookie, sondern die Session entfernt wurde.

                              Korrektur: Da diese Anweisung vor jeden start_session() Aufruf geschrieben werden müsste, habe ich eine lokale php.ini genutzt. Dann ist keine Anderung der Dateien erforderlich.

                              FG Ludwig
                              Zuletzt geändert von ludwig33; 18.08.2006, 13:38.

                              Kommentar

                              Lädt...
                              X