Marc22: gc_maxlifetime abhängig von Inaktivität

Hallo,

kann mir vielleicht wer sagen, ob der Wert von gc_maxlifetime sich auf die absolute Zeit oder auf die Zeit einer "Inaktivitäts-Phase" bezieht?

Also - Wenn 3600 Sek. eingestellt sind - Ist die Session in jedem Fall nach einer halben Stunde dem GC zum Abschuss freigegeben oder erst nach einer halben Stunde Inaktivität?

Danke schon mal

  1. Hi!

    kann mir vielleicht wer sagen, ob der Wert von gc_maxlifetime sich auf die absolute Zeit oder auf die Zeit einer "Inaktivitäts-Phase" bezieht?

    Da PHP keine Inaktivität feststellen kann, kann es nur das Dateisystem befragen. Und da wird die Modification Time als Indikator verwendet, so sagt es das PHP-Handbuch zu session.gc_maxlifetime.

    Also - Wenn 3600 Sek. eingestellt sind - Ist die Session in jedem Fall nach einer halben Stunde dem GC zum Abschuss freigegeben oder erst nach einer halben Stunde Inaktivität?

    Frühestens 3600 Sekunden nach dem mtime-Wert, das aber nur, wenn alle Scripte, die auf das gleiche Session-Verzeichnis zugreifen, gleich eingestellt sind. Da sie das nicht müssen, kann es durchaus passieren, dass ein Script mit kürzeren Werten die Sessiondateien der anderen löscht. Abhilfe wäre, jeder Anwendung ihr eigenes Session-Verzeichnis zu konfigurieren.

    Lo!

    1. Spätestens, wenn das Skript erneut auferufen wird, bekommt PHP das ja mit. Und da stellt sich halt die Frage, ob das Timeout quasi auf 0 zurückgestellt wird oder ob es einfach weiter läuft..

      1. Hi!

        Spätestens, wenn das Skript erneut auferufen wird, bekommt PHP das ja mit. Und da stellt sich halt die Frage, ob das Timeout quasi auf 0 zurückgestellt wird oder ob es einfach weiter läuft..

        Was oder besser gesagt, wie soll es denn das mitbekommen? Zwischen zwei PHP-Aufrufen gibt es nichts. Deswegen hat man ja die Session erfunden, um sich über das Nichts hinweg etwas merken zu können. Und da kann dann nur das Dateidatum herangezogen werden. In der Session-Datei oder an einem anderen Ort wird jedenfalls diesbezüglich keine Information abgelegt.

        Daraus folgt, dass es keinen Countdown mit Timeout gibt sondern, dass vielmehr über die Freigabe anhand der Differenz von aktueller Zeit zur Modifikationszeit entschieden wird.

        Lo!

        1. Das meine ich ja gerade: Wird bei jedem Skriptaufruf das Änderungsdatum der Datei auf den aktuellen Zeitpunkt gesetzt oder nicht?

          1. Hi,

            Das meine ich ja gerade: Wird bei jedem Skriptaufruf das Änderungsdatum der Datei auf den aktuellen Zeitpunkt gesetzt oder nicht?

            https://forum.selfhtml.org/?t=189696&m=1263816

            MfG ChrisB

            --
            Light travels faster than sound - that's why most people appear bright until you hear them speak.
    2. Hi,

      Da PHP keine Inaktivität feststellen kann, kann es nur das Dateisystem befragen. Und da wird die Modification Time als Indikator verwendet, so sagt es das PHP-Handbuch zu session.gc_maxlifetime.

      "If you are using the default file-based session handler, your filesystem must keep track of access times (atime)."

      atime und mtime sind ein Unterschied.

      Auch ohne Veränderung der Session-Daten dürfte ein reines session_start am Scriptanfang, dass die Session-Daten wieder einliest, auch für eine Veränderung der atime sorgen.

      MfG ChrisB

      --
      Light travels faster than sound - that's why most people appear bright until you hear them speak.
      1. Hi!

        Da PHP keine Inaktivität feststellen kann, kann es nur das Dateisystem befragen. Und da wird die Modification Time als Indikator verwendet, so sagt es das PHP-Handbuch zu session.gc_maxlifetime.

        "If you are using the default file-based session handler, your filesystem must keep track of access times (atime)."

        Bitte nach der zitierten Stelle weiterlesen. PHP 4.2.3 ist lange her, seit dem wird mtime verwendet.

        atime und mtime sind ein Unterschied.

        Ja, aber auch unter Unix wird aus Performancegründen gern auf ein atime-Handling verzichtet.

        Auch ohne Veränderung der Session-Daten dürfte ein reines session_start am Scriptanfang, dass die Session-Daten wieder einliest, auch für eine Veränderung der atime sorgen.

        Nicht mehr, atime wird im Session-Verzeichnis des PHP-Codes nicht gefunden, und maxlifetime wird gegen now minus mtime geprüft.

        Lo!

        1. Hi,

          Bitte nach der zitierten Stelle weiterlesen. PHP 4.2.3 ist lange her, seit dem wird mtime verwendet.

          Oops, danke.

          D.h., nur schreibende Zugriffe sorgen dafür, dass der Zeitpunkt der letzten "Benutzung" der Session(-daten) aktualisiert wird.

          Wenn ich die Beschreibung zu session_write_close richtig deute, zieht ein session_start allerdings auch automatisch zum Scriptende ein Neu-Schreiben der Session-Datei nach sich, auch wenn an den Daten nichts geändert wurde ...?
          "Session data is usually stored after your script terminated without the need to call session_write_close()"

          Wobei dieser Nutzerkommentar sich wieder anders liest,
          "It seems that the session data is written out when there is actual changes to the array."

          Kannst du genaueres dazu sagen?

          MfG ChrisB

          --
          Light travels faster than sound - that's why most people appear bright until you hear them speak.
          1. Hi!

            D.h., nur schreibende Zugriffe sorgen dafür, dass der Zeitpunkt der letzten "Benutzung" der Session(-daten) aktualisiert wird.
            Kannst du genaueres dazu sagen?

            Nein, aber das sollte nicht allzu schwer zu analysieren sein.
            Vorbereitung: Session anlegen lassen.
            Erster Versuch: Dateizeiten (besonders mtime) ansehen, session_start() ausführen, sleep(ausreichend), währenddessen Dateizeiten ansehen, Scriptende, wieder Dateizeiten ansehen.

            Zweiter Versuch: ähnlich wie Nummer eins aber mit Datenänderungen.

            Lo!

            1. Hi,

              D.h., nur schreibende Zugriffe sorgen dafür, dass der Zeitpunkt der letzten "Benutzung" der Session(-daten) aktualisiert wird.
              Kannst du genaueres dazu sagen?

              Nein, aber das sollte nicht allzu schwer zu analysieren sein.
              Vorbereitung: Session anlegen lassen.
              Erster Versuch: Dateizeiten (besonders mtime) ansehen, session_start() ausführen, sleep(ausreichend), währenddessen Dateizeiten ansehen, Scriptende, wieder Dateizeiten ansehen.

              Zweiter Versuch: ähnlich wie Nummer eins aber mit Datenänderungen.

              OK, der Vollständigkeit halber:

              session_start() allein reicht offenbar aus, um PHP bei Scriptende dazu zu bringen, die Session-Datei neu zu schreiben (oder die mtime einzeln neu zu setzen, das kann ich so nicht feststellen) - auch ohne Änderung von Daten in $_SESSION und ohne session_write_close().

              Getestet unter PHP 5.2.5, als Modul eingebunden in Apache/2.2.11 auf Vista, Dateisystem NTFS - mit sleep-Zeit von 30 Sekunden.

              MfG ChrisB

              --
              Light travels faster than sound - that's why most people appear bright until you hear them speak.
              1. Unter Windows (und XAMPP) anscheinend nicht. Hier wird die Session-Datei erst nach einer Manipulation oder Lesen von $_SESSION neu geschrieben.

                1. Hi,

                  Unter Windows (und XAMPP) anscheinend nicht. Hier wird die Session-Datei erst nach einer Manipulation oder Lesen von $_SESSION neu geschrieben.

                  Also "unter Windows" war mein Test ja auch, und XAMPP dürfte sich von einer manuellen Apache/PHP-Installation auch nicht gravierend unterscheiden.

                  Welche Versionen sind jeweils im Einsatz (Apache, PHP), welches Dateisystem verwendest du?

                  MfG ChrisB

                  --
                  Light travels faster than sound - that's why most people appear bright until you hear them speak.
                  1. ISt schon bisschen her, aber trotdem:

                    1.7.1

                    1. Hi,

                      ISt schon bisschen her, aber trotdem:

                      1.7.1

                      Wow.

                      Wenn auf eine Rückfrage, die kurz, präzise und klar exakt *drei* Fakten in Erfahrung bringen wollte, mit genau *einer* Angabe (wobei auch bei der nicht zweifelsfrei klar ist, worauf sie nun bezogen ist) geantwortet wird - das nötigt mir doch immer wieder eine Art von Respekt ab. Respekt deshalb, weil ich zwar vermute, dass derjenige, der diese Antwort gibt, es irgendwie schafft, sich morgens alleine anzuziehen - mir allerdings auf Basis der gezeigten Intelligenzleistung nicht vorstellen kann, *wie* der das macht.

                      MfG ChrisB

                      --
                      Light travels faster than sound - that's why most people appear bright until you hear them speak.
  2. Hi,

    Also - Wenn 3600 Sek. eingestellt sind - Ist die Session in jedem Fall nach einer halben Stunde dem GC zum Abschuss freigegeben oder erst nach einer halben Stunde Inaktivität?

    Weder noch. Es sei denn, in deinem Universum hat die Stunde 7200 Sekunden.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
    1. Weder noch. Es sei denn, in deinem Universum hat die Stunde 7200 Sekunden.

      cu,
      Andreas

      Natürlich meinte ich 1 Std. :D