web-dev-qa-db-fra.com

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

Si je frappe une page qui appelle session_start(). Combien de temps devrais-je attendre, de sorte que si je devais rafraîchir la page, un nouvel ID de session me soit délivré?

53
Greg B

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

Je crois que la valeur par défaut est de 1440 secondes (24 minutes)

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

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

Comment puis-je expirer une session PHP après 30 minutes?

50
Martin

La valeur par défaut dans le php.ini pour le session.gc_maxlifetime la directive (le "gc" est pour la collecte des ordures) est de 1440 secondes ou 24 minutes. Reportez-vous à la page Configuration de l'exécution de session dans le manuel:

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

Vous pouvez modifier cette constante dans les fichiers php.ini ou .httpd.conf si vous y avez accès, ou dans le fichier local .htaccess sur votre site Web. Pour définir le délai d'expiration sur une heure à l'aide de 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ôte partagé ou si vous hébergez plusieurs sites où vous n'avez pas modifié la valeur par défaut. L'emplacement de session par défaut est le répertoire/tmp, et la routine de récupération de place s'exécutera toutes les 24 minutes pour ces autres sites (et effacera vos sessions dans le processus, quelle que soit leur durée être conservé). Voir note sur la page de manuel ou ce site pour une meilleure explication.

La réponse à cela est de déplacer vos sessions vers un autre répertoire en utilisant session.save_path. Cela aide également à empêcher les méchants de détourner les sessions de vos visiteurs du répertoire par défaut/tmp.

22
flamingLogos

Selon un utilisateur du site PHP.net , ses efforts pour maintenir la session en vie ont échoué, il a donc dû faire un contournement.

<?php

$Lifetime = 3600;
$separator = (strstr(strtoupper(substr(PHP_OS, 0, 3)), "WIN")) ? "\\" : "/";

$DirectoryPath = dirname(__FILE__) . "{$separator}SessionData";
//in Wamp for Windows the result for $DirectoryPath
//would be C:\wamp\www\your_site\SessionData

is_dir($DirectoryPath) or mkdir($DirectoryPath, 0777);

if (ini_get("session.use_trans_sid") == true) {
    ini_set("url_rewriter.tags", "");
    ini_set("session.use_trans_sid", false);

}

ini_set("session.gc_maxlifetime", $Lifetime);
ini_set("session.gc_divisor", "1");
ini_set("session.gc_probability", "1");
ini_set("session.cookie_lifetime", "0");
ini_set("session.save_path", $DirectoryPath);
session_start();

?>

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

3
Junior M

cela dépend de vos paramètres php ...
utilisez phpinfo() et jetez un œil au chapitre de la session. Il existe des valeurs comme session.gc_maxlifetime et session.cache_expire et session.cookie_lifetime qui affecte la durée de vie des sessions

EDIT: c'est comme Martin écrit avant

2
jochil

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 ferez pas dans votre script (ou sale via Shell)

PHP.INI:

; Lifetime in seconds of cookie or, if 0, until browser is restarted.
; http://php.net/session.cookie-lifetime
session.cookie_lifetime = 0
1
Sliq

Vous pouvez également utiliser quelque chose comme ini_set('session.gc_maxlifetime', 28800); // 8 * 60 * 60.

0
Eduardo Cuomo