Maison >développement back-end >tutoriel php >Comment puis-je faire expirer efficacement une session PHP après 30 minutes d'inactivité ?
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 :
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!