Sebastian: timeout für Sessions

Hallo liebe Gemeinde!

Dank dieses Feature-Artikels habe ich für einen kleinen Login-Bereich meines Projekts Sessions eingeführt. Klappt auch alles hervorragend.

Jedoch stellte sich mir die Frage, ob, und wenn ja, wie, es mit der Feature-Artikel-Lösung möglich ist, ein automatisches timeout für jede Session zu implementieren. Ich stelle mir vor, dass, wenn jemand 31 Minuten nach seinem Login bzw. nach seiner letzten Aktivität innerhalb des Login-Bereiches erneut eine Seite innerhalb des geschützten Bereiches aufruft, auf die Seite login.php verwiesen wird.

Geht das? Und wenn ja, wie?

Vielen dank und schöne Grüße -
Sebastian

  1. Hi,

    Jedoch stellte sich mir die Frage, ob, und wenn ja, wie [..] auf die Seite login.php verwiesen wird.
    Geht das? Und wenn ja, wie?

    in der login.php wird die sessionvariable $_SESSION['angemeldet'] erstellt. durch:

      
    session_start();  
    if(!$_SESSION['angemeldet'])  
    {  
      header("Location: login.php");  // leitet auf die login.php  
      die;  // verhindert das ausführen der aufgerufenen datei  
    }  
    
    

    dies sollten die ersten 6 zeilen deiner scripte des geschützten bereiches sein.

    MfG

    1. Hallo Daniel,

        
      
      > if(!$_SESSION['angemeldet'])  
      
      if(!isset($_SESSION['angemeldet']))
      

      header("Location: login.php"); // leitet auf die login.php

      mal abgesehen davon, dass hier eine absolute URL stehen muss - schöner wäre es noch, wenn man noch einen Query-String dranhängt, damit die login.php wieder auf die gerade verlassene Seite zurückleiten kann.

      die;  // verhindert das ausführen der aufgerufenen datei

      ich verwende immer exit;

      Grüße aus Nürnberg
      Tobias

      1. Hi,

        if(!$_SESSION['angemeldet'])
        if(!isset($_SESSION['angemeldet']))

          
        nuja, wenn $\_SESSION['angemeldet'] aber == false ist dann ist isset nicht gut, klar ein  
          
        ~~~php
          
        if(!isset($_SESSION['angemeldet']))  
        {  
          if($_SESSION['angemeldet'])  
          {  
            // der die das Client ist eingeloggt  
          }  
        }  
        
        

        Wäre wohl sauberer.

        die;  // verhindert das ausführen der aufgerufenen datei
        ich verwende immer exit;

        naja, jedem das seine, ich empfinde die; als eindeutiger.

        MfG

  2. Hallo ihr zwei,

    vielen Dank für die Antworten, aber was ich eigentlich wissen wollte ist:

    Jedoch stellte sich mir die Frage, ob, und wenn ja, wie, es mit der Feature-Artikel-Lösung möglich ist, ein automatisches timeout für jede Session zu implementieren.

    Wie lange bleibt jemand, der mit der Feature-Artikel-Lösung eingeloggt ist, angemeldet? Bzw. wie baue ich ein, dass die Session nach einer gewissen Zeit automatisch zerstört wird?

    Nochmal Danke im Voraus und schöne Grüße -
    Sebastian

    1. Hi,

      Wie lange bleibt jemand, der mit der Feature-Artikel-Lösung eingeloggt ist, angemeldet?

      das kommt nicht darauf an.

      Bzw. wie baue ich ein, dass die Session nach einer gewissen Zeit automatisch zerstört wird?

      Das liegt an den einstellungen des Servers. du könntest aber außer
      $_SESSION['angemeldet'] noch ein $_SESSION['letzte_aktion'] machen.

        
      $akt_timestamp = time();  
      $max_time = //x-sekunden  
      if(($_SESSION['letzte_aktion']+$max_time)<$akt_timestamp)  
      {  
      // letzte aktion liegt schon lännger als x-sekunden zurück  
      }  
      else  
      {  
      $_SESSION['letzte_aktion'] = $akt_timestamp;  
      }  
      
      

      MfG

      1. Hallo Daniel,

        Du könntest aber außer
        $_SESSION['angemeldet'] noch ein $_SESSION['letzte_aktion'] machen.

        $akt_timestamp = time();
        $max_time = //x-sekunden
        if(($_SESSION['letzte_aktion']+$max_time)<$akt_timestamp)
        {
        // letzte aktion liegt schon lännger als x-sekunden zurück
        }
        else
        {
        $_SESSION['letzte_aktion'] = $akt_timestamp;
        }

          
        Vielen Dank - funktioniert allerbest!  
          
        Gruß -  
        Sebastian