Maison >développement back-end >tutoriel php >Comment gérer de manière fiable l'expiration d'une session PHP après 30 minutes ?

Comment gérer de manière fiable l'expiration d'une session PHP après 30 minutes ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-25 04:59:16797parcourir

How to Reliably Manage PHP Session Expiry After 30 Minutes?

Comment gérer l'expiration d'une session PHP après 30 minutes

La nécessité de maintenir une session active pendant une heure spécifique, puis d'y mettre fin est courant dans le développement Web. PHP propose des options pour définir les délais d'expiration des sessions, mais elles ne donnent pas toujours des résultats fiables. Comprenons les lacunes des mécanismes PHP existants et explorons une solution fiable.

Problèmes de fiabilité des options de délai d'attente intégrées de PHP

PHP propose deux options pour définir la session. timeouts :

  1. session.gc_maxlifetime : contrôle le nombre de secondes après lesquelles PHP considère les données de session comme des « déchets » et lance le nettoyage. Cependant, cette option n'est pas fiable car le processus de garbage collection dépend d'une probabilité aléatoire déterminée par session.gc_probability et session.gc_divisor.
  2. session.cookie_lifetime : Spécifie la durée de vie du cookie envoyé au navigateur. Cependant, cette option a simplement un impact sur la durée du cookie et n'invalide pas la session elle-même.

Mise en œuvre d'un mécanisme d'expiration de session personnalisé

Pour établir un délai d'expiration de la session, implémentez votre propre solution. Ceci peut être réalisé en conservant un horodatage représentant la dernière activité de l'utilisateur.

if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) {
    // Last request was more than 30 minutes ago
    session_unset(); // Unset $_SESSION variable
    session_destroy(); // Destroy session data in storage
}
$_SESSION['LAST_ACTIVITY'] = time(); // Update last activity timestamp
  1. Vérifiez si une clé "LAST_ACTIVITY" existe dans la session et vérifiez si 30 minutes se sont écoulées depuis la dernière activité.
  2. Si la session est inactive depuis plus de 30 minutes, supprimez toutes les variables de session en utilisant session_unset() et détruisez la session en utilisant session_destroy().
  3. Mettre régulièrement à jour l'horodatage "LAST_ACTIVITY" à chaque requête pour maintenir la session en vie pendant une utilisation active.

Comme la mise à jour des données de session à chaque requête modifie la date de modification du fichier de session , le garbage collector ne supprimera pas prématurément la session.

Pour plus de sécurité, pensez à régénérer périodiquement l'ID de session pour atténuer la session tentatives de piratage :

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 and invalidate old one
    $_SESSION['CREATED'] = time(); // Update creation time
}

Notes supplémentaires

  1. Assurez-vous que session.gc_maxlifetime est défini sur une valeur supérieure ou égale au gestionnaire d'expiration personnalisé. durée (1800 dans cet exemple).
  2. Si vous cherchez à faire expirer la session en fonction de 30 minutes d'activité, définissez une expiration du cookie à l'aide de setcookie(..., time() 60*30) pour garder le cookie de session actif.

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