max value for "session.gc_maxlifetime" is 65535. values bigger than this may cause php session stops working.
Configuration à l'exécution
Le comportement de ces fonctions est affecté par la configuration dans le fichier php.ini.
| Nom | Défaut | Modifiable | Historique |
|---|---|---|---|
| session.save_path | "" | PHP_INI_ALL | |
| session.name | "PHPSESSID" | PHP_INI_ALL | |
| session.save_handler | "files" | PHP_INI_ALL | |
| session.auto_start | "0" | PHP_INI_ALL | |
| session.gc_probability | "1" | PHP_INI_ALL | |
| session.gc_divisor | "100" | PHP_INI_ALL | Disponible depuis PHP 4.3.2. |
| session.gc_maxlifetime | "1440" | PHP_INI_ALL | |
| session.serialize_handler | "php" | PHP_INI_ALL | |
| session.cookie_lifetime | "0" | PHP_INI_ALL | |
| session.cookie_path | "/" | PHP_INI_ALL | |
| session.cookie_domain | "" | PHP_INI_ALL | |
| session.cookie_secure | "" | PHP_INI_ALL | Disponible depuis PHP 4.0.4. |
| session.cookie_httponly | "" | PHP_INI_ALL | Disponible depuis PHP 5.2.0. |
| session.use_cookies | "1" | PHP_INI_ALL | |
| session.use_only_cookies | "1" | PHP_INI_ALL | Disponible depuis PHP 4.3.0. |
| session.referer_check | "" | PHP_INI_ALL | |
| session.entropy_file | "" | PHP_INI_ALL | |
| session.entropy_length | "0" | PHP_INI_ALL | |
| session.cache_limiter | "nocache" | PHP_INI_ALL | |
| session.cache_expire | "180" | PHP_INI_ALL | |
| session.use_trans_sid | "0" | PHP_INI_ALL | PHP_INI_ALL en PHP <= 4.2.3. PHP_INI_PERDIR en PHP < 5. Disponible depuis PHP 4.0.3. |
| session.bug_compat_42 | "1" | PHP_INI_ALL | Disponible depuis PHP 4.3.0. Supprimé en PHP 5.4.0. |
| session.bug_compat_warn | "1" | PHP_INI_ALL | Disponible depuis PHP 4.3.0. Supprimé en PHP 5.4.0. |
| session.hash_function | "0" | PHP_INI_ALL | Disponible depuis PHP 5.0.0. |
| session.hash_bits_per_character | "4" | PHP_INI_ALL | Disponible depuis PHP 5.0.0. |
| url_rewriter.tags | "a=href,area=href,frame=src,form=,fieldset=" | PHP_INI_ALL | Disponible depuis PHP 4.0.4. |
| session.upload_progress.enabled | "1" | PHP_INI_PERDIR | Disponible depuis PHP PHP 5.4.0. |
| session.upload_progress.cleanup | "1" | PHP_INI_PERDIR | Disponible depuis PHP PHP 5.4.0. |
| session.upload_progress.prefix | "upload_progress_" | PHP_INI_PERDIR | Disponible depuis PHP PHP 5.4.0. |
| session.upload_progress.name | "PHP_SESSION_UPLOAD_PROGRESS" | PHP_INI_PERDIR | Disponible depuis PHP PHP 5.4.0. |
| session.upload_progress.freq | "1%" | PHP_INI_PERDIR | Disponible depuis PHP PHP 5.4.0. |
| session.upload_progress.min_freq | "1" | PHP_INI_PERDIR | Disponible depuis PHP PHP 5.4.0. |
Le système de sessions dispose d'un grand nombre de directives dans le fichier php.ini. En voici une présentation :
-
session.save_handlerstring - Définit le nom du gestionnaire de session qui est utilisé pour stocker et relire les données. Par défaut, c'est le système intégré par fichiers : files. Noter que les extensions individuelles doivent enregistrer leurs propres gestionnaires de session. Voir aussi session_set_save_handler().
-
session.save_pathstring -
Définit le chemin qui doit être passé
au gestionnaire de sauvegarde. Si vous décidez de
choisir le gestionnaire par défaut (par fichiers),
cet argument sera utilisé comme dossier de sauvegarde
des sessions. Voir aussi
session_save_path().
Il y a un argument optionnel N à cette directive qui détermine la profondeur de répertoires où votre fichier de session sera stocké. Par exemple, si vous définissez '5;/tmp', votre fichier sera situé dans /tmp/4/b/1/e/3/sess_4b1e384ad74619bd212e236e52a5a174If. Si vous voulez utiliser N, vous devez créer tous ces répertoires avant de les utiliser. Un petit script shell existe dans ext/session pour réaliser ces créations et il se nomme mod_files.sh, et sa version Windows porte le nom mod_files.bat. Notez également que si N est utilisé et est supérieur à 0, alors la routine automatique gc (garbage collection) ne sera pas exécutée ; voir une copie de php.ini pour plus d'informations. Également, si vous utilisez N, assurez-vous d'entourer session.save_path de "doubles guillemets" car le séparateur (;) est également utilisé pour les commentaires dans php.ini.
AvertissementSi vous laissez cette option configurée avec un dossier accessible en lecture à tout le monde, comme /tmp (par défaut), les autres utilisateurs pourront exploiter ces sessions en obtenant la liste de fichiers dans ce dossier.
Note: Avant PHP 4.3.6, les utilisateurs de Windows doivent changer cette valeur de variable pour que les fonctions de sessions de PHP fonctionnent. Indiquez un chemin de dossier valide, par exemple : c:/temp.
-
session.namestring - Spécifie le nom de la session, qui sera utilisé comme nom de cookie. Il ne doit contenir que des caractères alphanumériques. Par défaut, c'est PHPSESSID. Voir aussi session_name().
-
session.auto_startbooléen - Spécifie si le module de session doit démarrer automatiquement au début de chaque script PHP. Par défaut, c'est 0 (désactivé).
-
session.serialize_handlerstring - Définit le nom du gestionnaire qui est utilisé pour linéariser et délinéariser les données. Actuellement, le format interne à PHP (nommé php ou php_binary) et WDDX (nommé wddx) sont supportés. WDDX est seulement disponible, si PHP a été compilé avec l'option WDDX. Par défaut, c'est php.
-
session.gc_probabilityentier - Spécifie la probabilité, exprimée en pourcentage, en conjonction de session.gc_divisor, que la routine gc (garbage collection) soit démarrée à chaque requête. La valeur par défaut est 1. Voir session.gc_divisor pour plus de détails.
-
session.gc_divisorentier - session.gc_divisor en conjonction avec session.gc_probability définit la probabilité que la routine gc (garbage collection) soit démarrée à chaque début de session. La probabilité est calculée en utilisant gc_probability/gc_divisor, par exemple 1/100 signifie qu'il y a 1 % de chance pour que la routine gc démarre à chaque requête. La valeur par défaut est 100.
-
session.gc_maxlifetimeentier -
Spécifie la durée de vie des données sur le serveur, en nombre
de secondes. Après cette durée, les données seront considérées
comme obsolètes, et peuvent potentiellement être supprimées.
Les données peuvent devenir obsolètes lors du démarrage de la session
(suivant session.gc_probability et
session.gc_divisor).
Note:
Si des scripts différents ont des valeurs différentes de session.gc_maxlifetime mais partagent le même endroit pour y stocker les données de session, alors, le script dont la valeur est la plus petite effacera la donnée. Dans ce cas, utilisez cette directive conjointement avec session.save_path.
Note: Si vous utilisez le gestionnaire de sessions par fichier, qui est fourni par défaut, votre système doit garder la trace des dates de dernier accès aux fichiers (atime). La FAT de Windows ne le fait pas, il vous faudra donc trouver un autre système pour gérer les sessions qui ont expiré. Depuis PHP 4.2.3, on utilise mtime (date de modification) au lieu de atime. Ainsi, vous n'aurez plus de souci avec les systèmes de fichiers qui ne gèrent pas atime.
-
session.referer_checkentier - Contient une sous-chaîne que vous souhaitez retrouver dans tous les en-têtes HTTP Referer. Si cet en-tête a été envoyé par le client et que la sous-chaîne n'a pas été trouvée, l'identifiant de session sera considéré comme invalide. Par défaut, cette option est une chaîne vide.
-
session.entropy_filestring - Est un chemin jusqu'à une source externe (un fichier), qui sera utilisée comme source additionnelle d'entropie pour la création de l'identifiant de session. Des exemples valides sont /dev/random et /dev/urandom, qui sont disponibles sur tous les systèmes Unix. Cette fonctionnalité est supportée sous Windows depuis PHP 5.3.3. Le fait de définir session.entropy_length à une valeur différente de zéro fera que PHP utilisera l'API aléatoire de Windows comme source d'entropie.
-
session.entropy_lengthentier - Spécifie le nombre d'octets qui seront lus dans le fichier défini ci-dessus. Par défaut, il vaut 0, c'est-à-dire inactif.
- Spécifie si le module utilisera les cookies pour stocker l'id de session côté client. Par défaut, il vaut 1, c'est-à-dire actif.
- Spécifie si le module doit utiliser seulement les cookies pour stocker les identifiants de sessions du côté du navigateur. En l'activant, vous éviterez les attaques qui utilisent des identifiants de sessions dans les URL. Cette configuration a été ajoutée en PHP 4.3.0. Par défaut, vaut 1 (activé) depuis PHP 6.0.
-
Spécifie la durée de vie du cookie en secondes. La valeur de
0 signifie : "Jusqu'à ce que le navigateur soit éteint".
La valeur par défaut est 0. Voir aussi
session_get_cookie_params() et
session_set_cookie_params().
Note:
Le timestamp représentant la durée de vie du cookie est défini par rapport au temps du serveur, qui n'est pas forcément le même que le temps du navigateur.
- Spécifie le chemin utilisé lors de la création du cookie. Par défaut, il vaut /. Voir aussi session_get_cookie_params() et session_set_cookie_params().
- Spécifie le domaine utilisé lors de la création du cookie. Par défaut, il ne vaut rien, cela signifie que c'est le nom de l'hôte du serveur qui génère le cookie en accord avec les spécifications sur les cookies. Voir aussi session_get_cookie_params() et session_set_cookie_params().
- Spécifie que les cookies ne doivent être émis que sur des connexions sécurisées. Par défaut, cette option est à off. Cette option a été ajoutée en PHP 4.0.4. Voir aussi session_get_cookie_params() et session_set_cookie_params().
- Marque le cookie pour qu'il ne soit accessible que via le protocole HTTP. Cela signifie que le cookie ne sera pas accessible par les langage de script, comme Javascript. Cette configuration permet de limiter les attaques comme les attaques XSS (bien qu'elle n'est pas supporté par tous les navigateurs).
-
session.cache_limiterstring - Spécifie le type de contrôle de cache utilisé pour les pages avec sessions. Les valeurs possibles sont : nocache, private, private_no_expire, public. Par défaut, il vaut nocache. Voir aussi session_cache_limiter() pour connaître la signification de ces valeurs.
-
session.cache_expireentier - Spécifie la durée de vie des données de sessions, en minutes. Cette option n'a aucune conséquence sur le contrôle de cache. Par défaut, il vaut 180 (3 heures). Voir aussi session_cache_expire().
-
session.use_trans_sidbooléen -
Spécifie si le support du SID est transparent ou pas. Par défaut vaut 0
(désactivé).
Note: En PHP 4.1.2 ou plus ancien, cette option est activée en utilisant l'option de compilation --enable-trans-sid. Depuis PHP 4.2.0, cette option est toujours activée. Le système de gestion des sessions par URL pose un risque supplémentaire de sécurité : un utilisateur peut envoyer son URL avec l'identifiant de session par email à un ami, ou bien le mettre dans ses signets. Cela diffusera alors l'identifiant de session.
-
session.bug_compat_42booléen - Les versions de PHP antérieures à la version 4.2.3 disposaient d'une fonctionnalité/bogue non documentée, qui vous permettait d'initialiser une variable de session dans le contexte global, même si register_globals était désactivé. PHP 4.3.0 et plus récent vous préviendra de l'utilisation de cette fonctionnalité si vous avez aussi activé session.bug_compat_warn. Cette fonctionnalité/bogue peut être désactivée en désactivant cette directive.
-
session.bug_compat_warnbooléen - Les versions de PHP antérieures à la version 4.2.3 disposaient d'une fonctionnalité/bogue non documentée, qui vous permettait d'initialiser une variable de session dans le contexte global, même si register_globals était désactivé. PHP 4.3.0 et plus récent vous préviendra de l'utilisation de cette fonctionnalité si vous avez activé session.bug_compat_42 et session.bug_compat_warn.
-
session.hash_functionmixed -
session.hash_function vous permet de spécifier la fonction
de hachage à utiliser pour générer les identifiants de session. '0' signifie
MD5 (128 bits) et '1' signifie SHA-1 (160 bits).
Depuis PHP 5.3.0, il est également possible de spécifier n'importe quel algorithme fourni par l'extension hash (s'il est disponible), comme sha512 ou whirlpool. Une liste complète d'algorithmes peut être obtenue avec la fonction hash_algos().
Note:
Disponible depuis PHP 5.
-
session.hash_bits_per_characterentier -
session.hash_bits_per_character vous permet de définir
le nombre de bits utilisés pour chaque caractère lors des conversions des
données binaires en éléments lisibles. Les valeurs possibles sont '4' (0-9,
a-f), '5' (0-9, a-v), et '6' (0-9, a-z, A-Z, "-", ",").
Note:
Disponible depuis PHP 5.
-
Spécifie quelles sont les balises HTML qui doivent
être réécrites si le support transparent du SID
est activé. Par défaut, il vaut
a=href,area=href,frame=src,input=src,form=fakeentry,fieldset=.
Note: Si vous voulez vous conformer aux spécifications HTML/XHTML strictes, supprimez l'entrée form et utilisez le tag <fieldset> autour de votre balise form.
-
session.upload_progress.enabledboolean - Active la surveillance de la progression d'un téléchargement, en peuplant la variable $_SESSION. Par défaut, vaut 1 (activé).
-
session.upload_progress.cleanupboolean -
Nettoie les informations de progression dès que toutes les données POST
ont été lues (i.e. le téléchargement est terminé). Par défaut, vaut 1 (activé).
Note: Il est vivement recommandé de conserver active cette fonctionnalité.
-
session.upload_progress.prefixstring - Un préfixe utilisé pour la clé relative à la progression du téléchargement dans le tableau $_SESSION. Cette clé sera concaténé avec la valeur de $_POST[ini_get("session.upload_progress.name")] pour fournir un index unique. Par défaut, vaut "upload_progress_".
-
session.upload_progress.namestring - Le nom de la clé à utiliser dans le tableau $_SESSION pour y stocker les informations de progression. Voir aussi session.upload_progress.prefix. Si $_POST[ini_get("session.upload_progress.name")] n'est pas fourni ou disponible, la progression d'un téléchargement ne sera pas enregistrée. Par défaut, vaut "PHP_SESSION_UPLOAD_PROGRESS".
-
session.upload_progress.freqmixed - Définit le nombre de fois où les informations de progression de téléchargement doivent être mises à jour. Peut être défini en octets (i.e. "mettre à jour les informations de progression de téléchargement tous les 100 octets), ou en pourcentage (i.e. "mettre à jour les informations de progression de téléchargement tous les 1% de réception du poids total du fichier"). Par défaut, vaut "1%".
-
session.upload_progress.min-freqinteger - Le délai minimal entre les mises à jour, en seconde. Par défaut, vaut "1" (une seconde).
Les options track_vars et register_globals influencent le comportement des sessions, leur stockage et leur restauration.
La progression de téléchargement ne sera pas enregistrée tant que session.upload_progress.enabled n'est pas actif, et que la variable $_POST[ini_get("session.upload_progress.name")] n'est pas définie. Voir la progression de téléchargement de session pour plus d'informations sur cette fonctionnalité.
Note:
Depuis PHP 4.0.3, track_vars est toujours activé.
This is how I set my session.save_path
session.save_path = "1;/home/askapache/tmp/s"
So to create the folder structure you can use this compatible shell script, if you want to create with 777 permissions change the umask to 0000;
sh -o braceexpand -c "umask 0077;mkdir -p s/{0..9}/{a..z} s/{a..z}/{0..9}"
Then you can create a cronjob to clean the session folder by adding this to your crontab which deletes any session files older than an hour:
@daily find /home/askapache/tmp/s -type f -mmin +60 -exec rm -f {} \; &>/dev/null
That will create sessions in folder like:
/home/askapache/tmp/s/b/sess_b1aba5q6io4lv01bpc6t52h0ift227j6
I don't think any non-mega site will need to go more than 1 levels deep. Otherwise you create so many directories that it slows the performance gained by this.
apparently the default value for session.use_only_cookies has changed in 5.3.3 from 0 to 1. If you haven't set this in your php.ini or your code to 0 transparent sessions won't work.
Transient sessions do not appear to be working in 5.3.3
E.g.
<?php
ini_set("session.use_cookies", 0);
ini_set("session.use_trans_sid", 1);
session_start();
if (isset($_SESSION["foo"])) {
echo "Foo: " . $_SESSION["foo"];
} else {
$_SESSION["foo"] = "Bar";
echo "<a href=?" . session_name() . "=" . session_id() . ">Begin test</a>";
}
?>
This works in 5.2.5, but not 5.3.3
When setting the session.cookie_lifetime directive in a .htaccess use string format like;
php_value session.cookie_lifetime "123456"
and not
php_value session.cookie_lifetime 123456
Using a integer as stated above dit not work in my case (Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4.5 with Suhosin-Patch mod_ssl/2.2.11 OpenSSL/0.9.8g)
session.auto_start should always be "Off".
session.auto_start=On is considered "wrong" by Zend_Session as it causes an E_NOTICE to be thrown when Zend_Session::start() is called (either directly or indirectly, e.g., through Zend_Session_Namespace).
Recently, I needed to change the session save_path in my program under Windows. With an ini_set('session.save_path', '../data/sessions'); (and session.gc_divisor = 1 for test), I always obtain 'Error #8 session_start(): ps_files_cleanup_dir: opendir(../data/sessions) failed: Result too large'.
I corrected this by changing with ini_set('session.save_path', realpath('../data/sessions'));
In response to 00 at f00n, this very page explains:
"(...) if N is used and greater than 0 then automatic garbage collection will not be performed (...)"
So you can actually use custom save_path with automatic garbage collection, since you don't use the subdirectory option (that N subdirectory levels).
After having many problems with garbage collection not clearing my sessions I have resolved it through the following.
First I found this in the php.ini (not something i noticed as i use phpinfo(); to see my hosting ini).
; NOTE: If you are using the subdirectory option for storing session files
; (see session.save_path above), then garbage collection does *not*
; happen automatically. You will need to do your own garbage
; collection through a shell script, cron entry, or some other method. ; For example, the following script would is the equivalent of
; setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes):
; cd /path/to/sessions; find -cmin +24 | xargs rm
With this is mind there are options.
1. dont use a custom save_path.
** This means if your isp hasnt defaulted your session temp to something safer than install default or you are using a shared directory for session data then you would be wise to use named sessions to keep your session from being viewable in other people's scripts. Creating a unique_id name for this is the common method. **
2. use your custom folder but write a garbage collection script.
3. use a custom handler and a database
To get session IDs to show up in URIs, and not get stored via cookies, you must not only set session.use_cookies to 0, but also set session.use_trans_sid to 1. Otherwise, the session ID goes neither in a cookie nor in URIs!
