2010-09-22 10 views
6

j'utilise la technique suivante ...PHP - faire session expirent après X minutes

De la login.php la forme des messages à la page check.php où je fais

<?php  
$uzer = $_POST['user_name']; 
$pass = $_POST['user_pass']; 

require ('DB_connection.php'); 

$result = mysql_query("SELECT * FROM accounts WHERE user_Name='$uzer' AND user_Pass='$pass'"); 

if(mysql_num_rows($result) > 0) 
{ 
    $array = mysql_fetch_assoc($result);  

    session_start(); 
    $_SESSION['user_id'] = $uzer; 
    header("Location:loggedin.php");    
} 
else 
{ 
    header("Location:login.php"); 
} 
?> 

et sur la page loggedin.php la première chose que je fais est

<?php 
session_start(); 
if(!isset($_SESSION['user_id'])) 
{ 
    header("Location:login.php"); 
} 
else 
{ 
    echo ("this session is ". $_SESSION['user_id']); 
    //show rest of the page and all 
} 
?> 

mais une fois connecté quand je tape directement l'url localhost\myProject\loggedin.php il affiche la page ... ce qui est parfaitement logique car la session a commencé

ce que je veux mettre en œuvre est

  • L'URL directe \ Session fonctionne pendant 10 minutes après que la session est terminée \ a expiré \ a expiré et l'utilisation doit se connecter à nouveau et peut obtenir le même identifiant de session, mais au bout de 10 minutes d'utilisation ne sera pas en mesure de naviguer avec la même session

QU'EST-CE QUE DOIS-JE fAIRE OU eN SAVOIR

+1

Voir [Comment puis-je expirer une session PHP après 30 minutes?] (Http://stackoverflow.com/questions/520237/how-do-i-expire-a-php-session-after-30-minutes) – Gumbo

+0

Je sais C'est une question très ancienne, mais ceci est un résultat important pour plusieurs recherches de session dans Google. Toute personne lisant ceci devrait être conscient que le code dans la question est extrêmement peu sûr et susceptible d'injection SQL. Nous ne voudrions pas que les débutants Googling prennent de mauvaises habitudes. :-) Cette question sur SO devrait vous aider si vous voulez en savoir plus: http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php –

Répondre

10

Enregistrer un horodatage dans la session:

<?php  
$uzer = $_POST['user_name']; 
$pass = $_POST['user_pass']; 

require ('DB_connection.php'); 

// Hey, always escape input if necessary! 
$result = mysql_query(sprintf("SELECT * FROM accounts WHERE user_Name='%s' AND user_Pass='%s'", mysql_real_escape_string($uzer), mysql_real_escape_string($pass)); 

if(mysql_num_rows($result) > 0) 
{ 
    $array = mysql_fetch_assoc($result);  

    session_start(); 
    $_SESSION['user_id'] = $uzer; 
    $_SESSION['login_time'] = time(); 
    header("Location:loggedin.php");    
} 
else 
{ 
    header("Location:login.php"); 
} 
?> 

Vérifiez si l'horodatage est dans la fenêtre de temps alloué (600 secondes à 10 minutes):

<?php 
session_start(); 
if(!isset($_SESSION['user_id']) || time() - $_SESSION['login_time'] > 600) 
{ 
    header("Location:login.php"); 
} 
else 
{ 
    // uncomment the next line to refresh the session, so it will expire after ten minutes of inactivity, and not 10 minutes after login 
    //$_SESSION['login_time'] = time(); 
    echo ("this session is ". $_SESSION['user_id']); 
    //show rest of the page and all 
} 
?> 
+0

c'est juste qu'il y a '>' inplace de '<' – Moon

+1

Corrigé. Pour éviter la fixation de session, vous pouvez ajouter 'session_regenerate_id (false); session_destroy(); session_start();' après session_start(); – Lekensteyn

+0

Sera-ce 10 minutes sans activité ou seulement 10 minutes? J'essaie d'utiliser ceci pour les faire se déconnecter s'ils ne sont pas actifs pendant 30 minutes, mais je ne sais pas comment ... – Nathan

1

Je regardais session_set_cookie_params et ini_set("session.gc_maxlifetime", "18000");

+0

'gc_maxlifetime' est le garbage collector et n'a rien à voir avec la durée de vie réelle des sessions. Juste quand il est déplacé à la poubelle. Le 'session_set_cookie_params' est correct, cependant. –

+0

Je sais que c'est un très vieux post, mais j'ai cliqué sur votre lien aujourd'hui le 1er avril et sa rotation. ouch – Marriott81