Ankündigung

Einklappen
Keine Ankündigung bisher.

garbage Collector räumt nicht auf!

Einklappen

Neue Werbung 2019

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

  • garbage Collector räumt nicht auf!

    Hallo Leute ich habe das Problem das mein garbage Collector räumt nicht auf oder vielleicht habe ich auch ein Verständnisfehler. Nachfolgender Code legt fest wie lange ein Sitzung dauern soll bis aufgeräumt wird. aber egal wie lange ich warte meine Session die ich auf seite 2 abrufe ist immer aktiv! aber warum sollte doch nach 10 Sekunden weg sein!

    mache ich den browser zu ist die session wirklich weg! was mache ich verkehrt?

    Seite 1:
    PHP-Code:

    ini_set
    ('session.gc_probability'1);
    ini_set('session.gc_divisor'1);         
    ini_set('session.gc_maxlifetime'10); 


    seite2:

    session_start();

    $_SESSION['test']  = 1234
    Seite2:

    PHP-Code:

    session_start
    (); 


  • #2
    Seite 2 weiß nix von:
    PHP-Code:
    ini_set('session.gc_probability'1);
    ini_set('session.gc_divisor'1);         
    ini_set('session.gc_maxlifetime'10); 

    Kommentar


    • #3
      Setz die Konfiguration doch direkt in der php.ini, dann musst du es nicht auf jeder Seite neu schreiben ?
      No Sacrifice , no Glory--

      Kommentar


      • #4
        ..und deine ini_set's haben etwa die Wirkung wie ein Schild "Bitte Zimmer aufräumen" im Hotel. Du kannst nicht erwarten, das dies sofort passiert.

        Edit: Den Tip dies fix in die .ini zu schreiben finde ich nicht so toll.
        PHP-Klassen auf github

        Kommentar


        • #5
          auch wenn ich die Seite 2 wie folgt aussehen lasse:

          PHP-Code:

          ini_set
          ('session.gc_probability'1); 
          ini_set('session.gc_divisor'1);          
          ini_set('session.gc_maxlifetime'10);
          session_start();

          if (isset(
          $_SESSION['test'])) echo 'Ja ist gesetzt!'
          bekomme ich immer "ja ist gesetzt!" warum wird die session nicht gekillt? auch wenn ich das in die php.ini eintrage keinen verlust der session!

          oder beobachte ich das etwa falsch? wenn ich am Client im Browser aktualisieren drücke (nach Ablauf der Zeit) dürfte er doch nicht "ja ist gesetzt!"

          Kommentar


          • #6
            Ob das jetzt hilft, dennoch: Ich hatte vor längerm auch mal das Problem und nach etwas probieren und google etc.. verlor ich dann die Lust und hab es selbst gemacht.

            Dh eine Session Var mit dem aktuellen Timestamp gesetzt und bei jeder Aktion (im Zuge der generellen Auth-Prüfung) verglichen ob der gespeicherte länger als die maximal erlaubte Zeit her ist und wenn ja, dann Session manuell gekillt und auf die LoginSeite weitergeleitet. Die "Idee" dazu hatte ich beim googlen aufgegriffen weil ich scheinbar auch schon nicht der einzige war der es "richtig" gemacht hat. Ist aber schon eine Zeit aus. Die manuelle Variante hat auch den Vorteil das man volle Kontrolle darüber hat und sich nicht auf irgendwelche ini Variablen verlassen muss, die scheinbar eh nicht so wei man es möchte sich verhalten.
            Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
            PHP.de Wissenssammlung | Kein Support per PN

            Kommentar


            • #7
              so nach einer langen Nacht bin ich immer noch so schlau wie gestern! Der garbage Collector räumt einfach nicht die Session weg! kann sich der Thematik noch jemand annehmen?

              Kommentar


              • #8
                Moin,

                also session.gc_probability solltest du schon auf 100 setzen. Das ist eine %-Angabe.

                Ferner solltest du sicherstelllen, dass die Session nicht automatisch startet (session.auto_start), da du nachträglich keine Session-Settings per ini_set() ändern kannst.

                Kommentar


                • #9
                  Zitat von s-b Beitrag anzeigen
                  also session.gc_probability solltest du schon auf 100 setzen. Das ist eine %-Angabe.
                  Ach ja?

                  http://php.net/manual/de/session.con...ion.gc-divisor
                  Zitat von nikosch
                  Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

                  Kommentar


                  • #10
                    "%-Warscheinlichkeit mit der der GC gestartet wird" hört sich ja sehr verlässlich an )

                    Also mir ist das alles irgendwie zu viel "Magie". Jedenfalls, falls alles nichts hilft, hier kurz getippt, wie ich das grundsätzlich mit der manuellen Variante meinte:

                    PHP-Code:
                    session_start();

                    // Auth checken, whatever ...

                    // maximale Session-Zeit in Sek. ohne erneuten Request - hier zB 30 Minuten
                    $iSessionTimeoutSec 1800;

                    // aktuellen Timestamp (Sek.) holen
                    $oDateTime = new DateTime("now", new DateTimeZone("Europe/Berlin")); 
                    $iCurrTS $oDateTime->getTimestamp();

                    // wenn SessionVar noch nicht vorhanden, dann mit aktuellem Wert setzen
                    if (!isset($_SESSION("LAST_REQUEST"))) {
                        
                    $_SESSION("LAST_REQUEST") = $iCurrTS ;
                    }

                    // Prüfung ob abgelaufen
                    if ( ($iCurrTS $_SESSION("LAST_REQUEST")) > $iSessionTimeoutSec ) {
                        
                    // abgelaufen
                        // ... was auch immer hier passieren soll
                    }

                    // Alles ok, SessionVar mit aktuellem TS updaten
                    $_SESSION("LAST_REQUEST") = $iCurrTS 
                    LG
                    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                    PHP.de Wissenssammlung | Kein Support per PN

                    Kommentar


                    • #11
                      Ich vermute ein Verständnisproblem.

                      Solange du mit einem Script agierst, wird irgendwann mal aufgeräumt, aber nicht nach exakt 10 sekunden.
                      Wenn du jedoch ein zweiten Nutzer startest, z.B. mit einen anderen Browser, der eine neue Session initialisiert, dann wird aufgeräumt, wenn deine 10 Sekunden vorbei sind.

                      LG jspit

                      Edit:
                      PHP-Code:
                      <?php
                      ini_set
                      ('session.gc_probability'1); 
                      ini_set('session.gc_divisor'1);          
                      ini_set('session.gc_maxlifetime'10);
                      session_start();

                      echo 
                      'Zeit:'.Date('H:i:s').' , ';
                      if (isset(
                      $_SESSION['test'])) {
                        echo 
                      'test : '.$_SESSION['test'];
                      }
                      else {
                        
                      $_SESSION['test'] = date('Y-m-d H:i:s');
                        echo 
                      'Neue Session set -> '.$_SESSION['test'];
                      }
                      Ausgabe Browser 1 jeweils nach Aktualisierung:
                      Zeit:14:23:40 , Neue Session set -> 2014-08-13 14:23:40

                      Zeit:14:25:30 , test : 2014-08-13 14:23:40

                      Zeit:14:25:51 , test : 2014-08-13 14:23:40

                      Browser 2:
                      Zeit:14:26:12 , Neue Session set -> 2014-08-13 14:26:12

                      Browser 1:
                      Zeit:14:26:21 , Neue Session set -> 2014-08-13 14:26:21
                      PHP-Klassen auf github

                      Kommentar


                      • #12
                        session.gc_probability integer
                        session.gc_probability in conjunction with session.gc_divisor is used to manage probability that the gc (garbage collection) routine is started. Defaults to 1. See session.gc_divisor for details.

                        session.gc_divisor integer
                        session.gc_divisor coupled with session.gc_probability defines the probability that the gc (garbage collection) process is started on every session initialization. The probability is calculated by using gc_probability/gc_divisor, e.g. 1/100 means there is a 1% chance that the GC process starts on each request. session.gc_divisor defaults to 100.
                        Wahrscheinlichkeit GC in % = session.gc_probability / session.gc_divisor integer
                        Folglich ist session.gc_probability eine Prozentangabe.

                        Kommentar

                        Lädt...
                        X