2012-01-25 7 views
2

J'ai cherché un moyen de vérifier si une session est démarrée et depuis combien de temps elle a été démarrée, et si passe une demi-heure par say régénérer l'id , s'il passe plus d'une heure, détruis-le.Régénérer une session après un certain temps et la détruire après un certain temps

Je trouve ce code ici sur la pile:

//Start the session 
session_start(); 

// Check if the session is started, if not regenerate it each time passes 30 minutes 
if (!isset($_SESSION['init'])) { 
    $_SESSION['init'] = time(); 
} elseif (time() - $_SESSION['init'] > 1800) { 
    session_regenerate_id(true); 
    $_SESSION['init'] = time(); 
} 

//Check if the session was alive for more than one hour, if so kill it 
if (isset($_SESSION['last_activity']) && (time() - $_SESSION['last_activity'] > 3600)) { 
    session_destroy(); 
    session_unset(); 
} 
$_SESSION['last_activity'] = time(); 

Mais il semble fonctionner est quelques problèmes, j'ai essayé détruire au bout de 18 secondes pour que je puisse vérifier si elle fonctionne. Quand je demande la page qui est protégée et cela fait plus de 18 secondes, la première fois que je suis dessus, mais la deuxième fois que je suis redirigé car je suis supposé être la première fois après 18 secondes, pourquoi est-ce ?

Ai-je commis une erreur?

+1

Je suppose que super global $ _SESSION ['init'] a une certaine valeur, alors si (time() - $ _SESSION ['init'] supérieur à 1800 alors la session sera régénérée (un nouvel identifiant de session sera créé !) et $ _SESSION ['init'] reçoit l'horodatage UNIX actuel.La seconde partie fait de même mais ne régénère pas l'identifiant de session.Mais après votre premier et deuxième SI le super global $ _SESSION gagne une nouvelle valeur Horodatage UNIX actuel. c'est ce qu'il fait! Je vous recommande vraiment de lire cette page -> http://br2.php.net/manual/fr/function.session-regenerate-id.php – B4NZ41

+0

@Fernando - il serait donc préférable de choisissez seulement de régénérer ou de détruire et pas les deux? – Roland

+0

| Cela dépend vraiment de votre objectif! Mais selon votre question, il semble que vous aurez besoin d'utiliser les deux.Si plus de 1800 mais pas plus de 3600, vous avez juste besoin pour régénérer la session, mais si g Réglez le 3600 dont vous avez besoin pour tuer la session. Je suppose que vous devez utiliser les deux. – B4NZ41

Répondre

0

Lorsque vous exécutez la page la première fois, vous vérifiez si une session est définie, puis à la fin définissez la variable de session. Vous devriez mettre le $_SESSION['last_activity'] = time(); au début. De plus, la page ne vérifie pas si une variable de session a expiré, elle vérifie uniquement si vous avez défini la variable sur une page et si vous l'avez cochée/définie sur toutes les pages que vous souhaitez protéger.

Questions connexes