74 votes

Quelle est la durée de vie par défaut d'une session?

Si j'accède à une page qui appelle session_start(), combien de temps devrais-je attendre avant d'obtenir un nouvel ID de session lorsque je rafraîchis la page ?

4 votes

Regardez aussi pour une réponse plus détaillée : stackoverflow.com/questions/520237/…

65voto

Martin Points 15155

Vérifiez php.ini la valeur définie pour session.gc_maxlifetime est la durée de vie de l'ID en secondes.

Je crois que par défaut c'est 1440 secondes (24 minutes)

http://www.php.net/manual/en/session.configuration.php

Modifier: Comme certains commentaires le soulignent, ce qui précède n'est pas entièrement exact. Une merveilleuse explication sur pourquoi, et comment mettre en œuvre les durées de vie des sessions est disponible ici:

Comment faire expirer une session PHP après 30 minutes?

6 votes

-1, pas une réponse correcte à la question. idée reçue.

23 votes

@chris pourquoi ne pas suggérer une réponse alternative?

5 votes

Comme l'écrit Brannon, c'est complètement faux et ne devrait pas être la réponse sélectionnée. Cette valeur indique au ramasse-miettes comment se comporter, ce n'est pas une question de durée de vie de votre session. Une session pourrait vivre éternellement si vous n'ajoutiez pas de mécanisme. La clé est de gérer la durée de vie de la session par vous-même (c'est-à-dire supprimer les données de session après une période d'inactivité) et de définir session.gc_maxlifetime sur une valeur supérieure ou égale. kontur a suggéré la meilleure réponse sur ce point, mais veuillez invalider cette réponse, elle pourrait même entraîner des problèmes de sécurité.

29voto

flamingLogos Points 3637

La valeur par défaut dans le fichier php.ini pour la directive session.gc_maxlifetime (le "gc" veut dire garbage collection) est de 1440 secondes ou 24 minutes. Voir la page de configuration de la session dans le manuel :

http://www.php.net/manual/fr/session.configuration.php

Vous pouvez changer cette constante dans les fichiers php.ini ou .httpd.conf si vous avez accès à eux, ou dans le fichier .htaccess local sur votre site web. Pour définir le délai d'expiration à une heure en utilisant la méthode .htaccess, ajoutez cette ligne au fichier .htaccess dans le répertoire racine du site :

php_value session.gc_maxlifetime "3600"

Soyez prudent si vous êtes sur un hébergement partagé ou si vous hébergez plus d'un site où vous n'avez pas modifié la valeur par défaut. L'emplacement par défaut de la session est le répertoire /tmp, et la routine de collecte des déchets s'exécutera toutes les 24 minutes pour ces autres sites (et supprimera vos sessions dans le processus, peu importe combien de temps elles devraient être conservées). Voir la note sur la page du manuel ou ce site pour une meilleure explication.

La solution à ce problème est de déplacer vos sessions vers un autre répertoire en utilisant session.save_path. Cela aide également à empêcher les personnes malveillantes de détourner les sessions de vos visiteurs du répertoire par défaut /tmp.

5 votes

-1, pas une réponse correcte à la question. idée fausse commune. un fichier de session collecté par le GC ne fera pas générer à PHP un nouvel identifiant de session, et la limite de temps n'est pas fiable même lorsque les sessions sont enregistrées dans leur propre répertoire.

6voto

Jochen Hilgers Points 917

Cela dépend de vos paramètres php...
utilisez phpinfo() et regardez le chapitre sur les sessions. Il existe des valeurs comme session.gc_maxlifetime et session.cache_expire et session.cookie_lifetime qui affectent la durée de vie des sessions

EDIT: c'est comme l'a écrit Martin avant

5voto

Junior Mayhé Points 5202

Selon un utilisateur sur le site de PHP.net, ses efforts pour maintenir la session active ont échoué, il a donc dû trouver une solution de contournement.

Dans le dossier SessionData, des fichiers texte seront stockés pour contenir les informations de session, chaque fichier aura un nom similaire à "sess_a_big_hash_here".

1voto

Panique Points 4680

Mais attention, sur la plupart des configurations xampp/ampp/... et certaines distributions linux, c'est 0, ce qui signifie que le fichier ne sera jamais supprimé tant que vous ne le faites pas dans votre script (ou de façon sale via le shell)

PHP.INI:

; Durée en secondes du cookie ou, si 0, jusqu'à ce que le navigateur soit redémarré.
; http://php.net/session.cookie-lifetime
session.cookie_lifetime = 0

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X