Comment expirer efficacement une session PHP après 30 minutes
Bien que PHP fournisse des options telles que session.gc_maxlifetime et session.cookie_lifetime pour l'expiration de la session, ils ne sont pas entièrement fiables. Voici une approche complète pour implémenter votre propre mécanisme d'expiration de session.
Problèmes avec les options intégrées de PHP :
Mise en place d'un délai d'expiration de session personnalisé :
Le moyen le plus efficace d'expirer une session après une période d'inactivité spécifique consiste à implémenter votre propre mécanisme de délai d'attente. Cela implique de conserver un horodatage de la dernière activité (demande) et de le mettre à jour à chaque demande. Si la dernière activité remonte à plus de 30 minutes, vous pouvez annuler et détruire la session.
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
En mettant continuellement à jour les données de la session, vous évitez que la date de modification du fichier de session ne soit supprimée prématurément par le garbage collector.
Mesures de sécurité supplémentaires :
Pour éviter les attaques telles que la fixation de session, vous pouvez régénérer périodiquement l'ID de session en mettant à jour l'horodatage $_SESSION['CREATED'] :
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!