Maison >développement back-end >tutoriel php >Comment puis-je faire expirer efficacement une session PHP après 30 minutes d'inactivité ?

Comment puis-je faire expirer efficacement une session PHP après 30 minutes d'inactivité ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-23 11:23:12748parcourir

How Can I Effectively Expire a PHP Session After 30 Minutes of Inactivity?

Expiration d'une session PHP après 30 minutes

Pour maintenir une session pendant une durée spécifique et y mettre fin par la suite, il est recommandé de mettre en œuvre un délai d'expiration de session personnalisé. Cette approche est plus fiable que de s'appuyer sur des paramètres de session tels que session.gc_maxlifetime ou session.cookie_lifetime.

1. session.gc_maxlifetime :

session.gc_maxlifetime détermine la durée après laquelle les données de session sont considérées comme des « poubelles » et supprimées. Cependant, le garbage collection se produit sporadiquement, ce qui en fait une méthode peu fiable pour l'expiration des sessions.

2. session.cookie_lifetime :

session.cookie_lifetime n'influence que la durée de vie du cookie envoyé au navigateur, pas la session elle-même. Le serveur est responsable de l'invalidation des sessions, pas le client.

Solution recommandée :

Implémentez un délai d'expiration de session personnalisé en conservant un horodatage qui suit l'heure de la dernière activité. Mettez à jour cet horodatage à chaque demande.

if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) {
    // last request was more than 30 minutes ago
    session_unset();     // unset $_SESSION variable for the run-time 
    session_destroy();   // destroy session data in storage
}
$_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp

Cette méthode fait effectivement expirer les données de session après 30 minutes d'activité et empêche leur suppression prématurée par le ramasse-miettes.

Pour une sécurité renforcée, envisagez de régénérer périodiquement l'ID de session pour empêcher la fixation de session attaques.

if (!isset($_SESSION['CREATED'])) {
    $_SESSION['CREATED'] = time();
} else if (time() - $_SESSION['CREATED'] > 1800) {
    // session started more than 30 minutes ago
    session_regenerate_id(true);    // change session ID for the current session and invalidate old session ID
    $_SESSION['CREATED'] = time();  // update creation time
}

Remarques :

  1. Définissez session.gc_maxlifetime pour qu'il soit au moins aussi long que le gestionnaire d'expiration personnalisé.
  2. Pour les sessions expirant en fonction de l'activité plutôt que du début de la session, définissez le délai d'expiration du cookie à l'aide de setcookie sur 30. minutes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn