2010-06-18 4 views
0

J'ai du code qui va déconnecter l'utilisateur après x secondes d'inactivité. Le problème est qu'il les déconnecte avant l'heure spécifiée, il ne compte même pas l'inactivité.Délai de session PHP, problème avec le code

Voici le code:

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

    if($_SESSION['loginTime'] < time()+10*60){ 
     $error_msg ="Logged out due to inactivity"; 

showLoginPasswordProtect($error_msg); 

session_destroy(); 
    } 
    ? 
+1

parce que l'heure de connexion serait toujours inférieure à temps() + rien !? –

Répondre

0

Vous devez définir $_SESSION['loginTime'] dans un script séparé, probablement après que l'utilisateur est authentifié. Ensuite, dans ce script, vous devez déterminer la différence entre l'heure de la session et l'heure actuelle, puis voir si elle est supérieure à votre seuil de délai d'expiration.

Par exemple:

if((time() - $_SESSION['loginTime']) > 10*60) { ... } 
1

Eh bien $_SESSION['loginTime'] est l'horodatage qu'ils connectés (espérons-le), qui toujours être inférieur à l'horodatage en cours, parce que vous ajoutez un pour chaque seconde. Donc, vous devez faire ceci:

<?php 

if($_SESSION['loginTime'] + 600 < time()){ 
    $error_msg ="Logged out due to inactivity"; 

    showLoginPasswordProtect($error_msg); 

    session_destroy(); 
} 
?> 

De cette façon, il exécutera l'instruction si 600 secondes se sont écoulées.

0

Regardez ce que fait votre script:

  1. $_SESSION['loginTime'] = time();

... définit la 'loginTime' à l'heure actuelle. Disons que l'heure actuelle est '10'

  1. if($_SESSION['loginTime'] < time()+10*60)

... puisque nous supposons l'heure actuelle est de 10, alors time()+10*60 devient 10+10*60 = 610, et if() devient:

Ainsi, votre code se déconnectera TOUJOURS de l'utilisateur, puisque votre logique est rompue.

Vous devez définir le loginTime une seule fois, dans le script de connexion, au lieu de le définir à chaque fois, comme vous l'êtes maintenant.