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?
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
@Fernando - il serait donc préférable de choisissez seulement de régénérer ou de détruire et pas les deux? – Roland
| 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