Session-Expiry - warum nicht gleich so?

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

  • Session-Expiry - warum nicht gleich so?

    Hallo Leute!

    Ich habe schon in einem anderen Thread gefragt (siehe hier), wodran das liegen kann, dass meine Session nicht expired. Nachdem ich aber ne Weile mit PHP-Leutem im IRC geredet hab, bin ich zu dem Schluss gekommen, dass eine andere Abfrage am einfachsten ist.

    Mir wurde lang und breit erklärt, dass es am einfachsten ist, bei jeder Benutzeraktion (Der Benutzer hat sich vorher bereits eingeloggt) eine Zeit zu speichern, und diese dann bei jeder nächsten mit der Alten zu vergleichen, und zu sehn ob die differnz zu groß ist, und ggf. die Session zu zerstören (beenden).

    Das habe ich jetzt wie folgt versucht umzusetzen. Die funktion head(); wird hierbei in jeder Datei ausgeführt, die ich benutze (und vorher die Session gestartet).

    Code:

    PHP-Code:
    <?php
      
    // Kopf-Funktionen
      
    function head() {
        
    // Falls eingeloggt, aktivität überprüfen
        
    if (isset($_SESSION['nick'])) {
          
    checkActivity();
        }
        
    headWithOutBody();
        echo 
    '  </head>
                <body>'
    ;
      }

      function 
    headWithoutBody() {
        echo 
    '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
                   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


              <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">
                <head>
                  <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
                  <title>Piraten</title>'
    ;
      }
      
    // Fuß-Funktion
      
    function foot() {
        echo 
    '  </body>
              </html>'
    ;
      }


      
    // In Header involviert
      
    function checkActivity() {
        global 
    $time_session_expiry;
        
    // Benutzer war zu lange inaktiv
        
    if ((time() - $_SESSION['lastact']) > ($time_session_expiry 60)) {
          
    session_destroy();
        }
        else {
          
    // Sonst letzte Aktionszeit setzen
          
    $_SESSION['lastact'] = time();
        }
      }
    ?>
    Mein Problem ist jetzt aber: Das funzt soweit eigentlich, leider bin ich aber immer erst nach der zweiten Aktion geflogen (habs bisher mitn Site refresh per Link getestet, nicht mit mehreren Dateien) - eigentlich sollte ich aber schon nach der ersten Aktion nach ablauf der Zeit fliegen.

    Kann mir einer sagen was ich falsch mache, oder ändern muss, oder oder? Danke schonmal!


    Achja, P.S.: Die Variable $time_session_expiry wird in einer anderen Datei vorher required, in der diese hier gepostete anschließend required wird.
    Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

  • #2
    Du könntest doch auch ein Cookie mit bestimmter Gültigkeitsdauer setzen und wenn das Cookie nicht mehr da ist - Session zerstören.

    Ansonsten erinnert mich das Problem mit dem "erst beim zweiten mal" an headers allready sent, d.h. die Session wird beim ersten Aufruf zerstört, aber es wird erst beim erneuten Aufruf der Seite "gemerkt".

    Kommentar


    • #3
      Okay, grad jez wo ich hier poste finde ich es selber raus, aber ich Poste mal die Antwort für die Nachwelt, falls jemand ähnliche Probleme hat oderso.

      Das Problem ist, dass session_destroy(); nur die Session beendet. Die ganzen $_SESSION-Variablen bleiben aber noch, zumindest kurzfristig, bestehen. Umgangen werden kann das, indem sie mit einem leeren Array überschrieben werden:

      PHP-Code:
        // In Header involviert
        
      function checkActivity() {
          global 
      $time_session_expiry;
          
      // Benutzer war zu lange inaktiv
          
      if ((time() - $_SESSION['lastact']) > ($time_session_expiry 60)) {
            
      // Session beenden
            
      session_destroy();
            
      // Alle $_SESSION-Variablen löschen
            
      $_SESSION = array();
          }
          else {
            
      // Sonst letzte Aktionszeit setzen
            
      $_SESSION['lastact'] = time();
          }
        } 
      So trotzdem danke, dass ihr mir bestimmt geholfen hättet *g*.

      Tschüss!
      Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

      Kommentar

      Lädt...
      X