46 votes

Expiration de durée de session

Je crée une session lorsqu'un utilisateur se connecte de la manière suivante:

 $_SESSION['id'] = $id;
 

Comment puis-je spécifier un délai d'expiration sur cette session de X minutes et lui demander ensuite d'exécuter une fonction ou une redirection de page une fois qu'il a atteint X minutes?

EDIT: J'ai oublié de mentionner que j'ai besoin de la session pour expirer en raison d'inactivité.

85voto

Jacco Points 12528

Tout d'abord, stocker la dernière fois que l'utilisateur a fait une demande

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

dans la requête suivante, vérifiez depuis combien de temps ils ont formulé leur demande précédente (10 minutes dans cet exemple)

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

44voto

Vinko Vrsalovic Points 116138

Lors de la session expire, les données ne sont plus présents, donc quelque chose comme

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

va rediriger chaque fois que la session n'est plus active.

Vous pouvez définir combien de temps le cookie de session est en vie à l'aide de session.cookie_lifetime

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

EDIT: Si vous êtes calendrier des séances en raison d'un problème de sécurité (au lieu de commodité), utilisez la accepté de répondre, comme les commentaires ci-dessous montrent, c'est contrôlée par le client et n'est donc pas sécurisé. Je n'ai jamais pensé à cela comme une mesure de sécurité.

2voto

Byterbit Points 29
 <script type="text/javascript">
window.setTimeout("location=('timeout_session.htm');",900000);
</script>
 

Dans l'en-tête de chaque page a fonctionné pour moi pendant les tests du site (le site n'est pas encore en production). La page HTML à laquelle elle se termine termine la session et informe simplement l'utilisateur de la nécessité de se reconnecter. Cela semble être un moyen plus facile que de jouer avec la logique PHP. J'aimerais des commentaires sur l'idée. Des pièges que je n'ai pas vus?

0voto

khaled_tn Points 29
     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{  
 

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X