it-swarm.com.de

PHP Session-Timeout

Ich erstelle eine Sitzung, wenn sich ein Benutzer wie folgt anmeldet:

$_SESSION['id'] = $id;

Wie kann ich für diese Sitzung ein Timeout von X Minuten festlegen und dann eine Funktion oder eine Seitenumleitung ausführen lassen, sobald X Minuten erreicht sind?

EDIT: Ich habe vergessen zu erwähnen, dass ich aufgrund von Inaktivität eine Zeitüberschreitung für die Sitzung benötige.

45
user342391

speichern Sie zuerst, wann der Benutzer das letzte Mal eine Anfrage gestellt hat

<?php
  $_SESSION['timeout'] = time();
?>

Überprüfen Sie in einer nachfolgenden Anfrage, wie lange sie ihre vorherige Anfrage gemacht hat (in diesem Beispiel 10 Minuten)

<?php
  if ($_SESSION['timeout'] + 10 * 60 < time()) {
     // session timed out
  } else {
     // session ok
  }
?>
85
Jacco

Wenn die Sitzung abläuft, sind die Daten nicht mehr vorhanden

if (!isset($_SESSION['id'])) {
    header("Location: destination.php");
    exit;
}

leitet um, wenn die Sitzung nicht mehr aktiv ist.

Mit session.cookie_lifetime können Sie einstellen, wie lange das Session-Cookie noch aktiv ist.

ini_set("session.cookie_lifetime","3600"); //an hour

BEARBEITEN: Wenn Sie aus Sicherheitsgründen Zeitüberschreitungen durchführen (anstelle der Bequemlichkeit), verwenden Sie die akzeptierte Antwort. Wie die folgenden Kommentare zeigen, wird dies vom Client gesteuert und ist daher nicht sicher. Ich habe das nie als Sicherheitsmaßnahme gesehen.

43
Vinko Vrsalovic

Überprüfen Sie zunächst, ob die Sitzung noch nicht erstellt wurde, und erstellen Sie eine Sitzung. Hier stelle ich es nur für 1 Minute ein.

<?php 
   if(!isset($_SESSION["timeout"])){
     $_SESSION['timeout'] = time();
   };
   $st = $_SESSION['timeout'] + 60; //session time is 1 minute
?>

<?php 
  if(time() < $st){
    echo 'Session will last 1 minute';
  }
?>
5
user1473910
<script type="text/javascript">
window.setTimeout("location=('timeout_session.htm');",900000);
</script>

In der Kopfzeile jeder Seite wurde bei Site-Tests für mich gearbeitet (die Site ist noch nicht in Produktion). Die HTML-Seite, die die Sitzung beendet, beendet die Sitzung und informiert den Benutzer lediglich darüber, dass er sich erneut anmelden muss. Dies scheint eine einfachere Methode zu sein, als mit der Logik von PHP zu spielen .. Ich würde gerne einige Kommentare zu der Idee abgeben. Irgendwelche Fallen, die ich noch nicht gesehen habe?

2
Byterbit
<?php 
session_start();

if (time()<$_SESSION['time']+10){
$_SESSION['time'] = time();
echo "welcome old user";
}

else{
session_destroy();
session_start();
$_SESSION['time'] = time();
echo "welcome new user";
}
?>
1
Uday Hiwarale

Byterbit-Lösung ist problematisch, weil:

  1. wenn der Client die Ablaufzeit eines serverseitigen Cookies kontrolliert, ist dies ein Sicherheitsrisiko.
  2. wenn auf Server-Seite festgelegtes Ablaufzeitlimit kleiner als das auf Clientseite festgelegte Zeitlimit ist, spiegelt die Seite nicht den tatsächlichen Status des Cookies wider.
  3. auch wenn dies in der Entwicklungsphase der Bequemlichkeit dient, ist dies ein Problem, da es nicht das richtige Verhalten (zeitlich) in der Release-Phase widerspiegelt.

für Cookies ist das Einstellen des Ablaufs über session.cookie_lifetime die richtige Lösung, was Design und Sicherheit angeht! Um die Sitzung abzulaufen, können Sie session.gc_maxlifetime verwenden.

das Ablaufen der Cookies durch Aufruf von session_destroy kann zu unvorhersehbaren Ergebnissen führen, da sie möglicherweise bereits abgelaufen sind.

die Änderung der Datei php.ini ist ebenfalls eine gültige Lösung, macht das Ablaufdatum jedoch für die gesamte Domäne global. Dies ist möglicherweise nicht das, was Sie wirklich wollen - einige Seiten können einige Cookies mehr als andere behalten.

1
Michael Badichi
    session_cache_expire( 20 );
    session_start(); // NEVER FORGET TO START THE SESSION!!!
    $inactive = 1200; //20 minutes *60
    if(isset($_SESSION['start']) ) {
$session_life = time() - $_SESSION['start'];
if($session_life > $inactive){
    header("Location: user_logout.php");
}
    }
    $_SESSION['start'] = time();

    if($_SESSION['valid_user'] != true){
    header('Location: ../....php');
    }else{  

quelle: http://www.daniweb.com/web-development/php/threads/124500

0
khaled_tn
<?php
session_start();
if($_SESSION['login'] != 'ok')
    header('location: /dashboard.php?login=0');

if(isset($_SESSION['last-activity']) && time() - $_SESSION['last-activity'] > 600) {
    // session inactive more than 10 min
    header('location: /logout.php?timeout=1');
}

$_SESSION['last-activity'] = time(); // update last activity time stamp

if(time() - $_SESSION['created'] > 600) {
    // session started more than 10 min ago
    session_regenerate_id(true); // change session id and invalidate old session
    $_SESSION['created'] = time(); // update creation time
}
?>
0
Dominic Ceraso