Le comportement de ces fonctions est
affecté par la configuration dans le fichier php.ini.
Le système de sessions dispose d'un grand nombre de directives
dans le fichier php.ini. En voici une présentation :
-
session.save_handler
string
-
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_path
string
-
Définit le chemin qui doit être passé
au gestionnaire de sauvegarde. Si l'on décide 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ù le fichier de session sera stocké.
Par exemple, si l'on définit '5;/tmp', le fichier
sera situé dans /tmp/4/b/1/e/3/sess_4b1e384ad74619bd212e236e52a5a174If.
Pour utiliser N, il faut 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. Il est également à noter 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, lors de l'utilisation de N, il faut s'assurer d'entourer
session.save_path de "doubles guillemets" car le séparateur
(;) est également utilisé pour les commentaires dans
php.ini.
Le module de stockage de fichiers crée des fichiers en utilisant le mode
600 par défaut. Ce mode par défaut peut être modifié en utilisant l'argument
optionnel MODE : N;MODE;/path où
MODE est la représentation octale du mode.
Le fait de définir l'argument MODE n'affecte pas le processus
umask.
Avertissement
Si cette option est 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.
Attention
Lors de l'utilisation de l'argument optionnel N
déterminant la profondeur de répertoires, voir plus haut, veuillez noter
que l'utilisation d'une valeur supérieure à 1 ou 2 n'est pas appropriée
pour la majorité des sites à cause du nombre de dossiers requis : par
exemple, une valeur de 3 implique que
(2 ** session.sid_bits_per_character) ** 3 dossiers
existent sur le système de fichiers ce qui implique potentiellement un
grand nombre d'espaces et d'inodes gaspillés.
N'utiliser une valeur de N supérieure à 2 uniquement
si l'on est certain que c'est nécessaire pour le site.
-
session.name
string
-
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_start
bool
-
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_handler
string
-
Définit le nom du gestionnaire qui est utilisé pour sérialiser et
désérialiser les données. Le format de sérialisation PHP
(nommé php_serialize), les formats internes à PHP
(nommés php et php_binary)
et WDDX (nommé wddx) sont supportés. WDDX est seulement
disponible, si PHP a été compilé avec l'option
WDDX. php_serialize
utilise les fonctions de sérialisation/désérialisation en interne,
et n'a pas les limitations que php et php_binary
ont. Les anciens gestionnaires de sérialisation ne peuvent pas stocker
d'index numérique, ni d'index sous forme de chaînes qui contiennent
des caractères spéciaux (| et !) en
$_SESSION. Utiliser php_serialize pour éviter ce
genre d'erreur en fin de script. Par défaut, c'est php.
-
session.gc_probability
int
-
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. Doit être supérieur ou égal à 0. Voir
session.gc_divisor pour plus de détails.
-
session.gc_divisor
int
-
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.
Doit être supérieur ou égal à 0.
-
session.gc_maxlifetime
int
-
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).
La valeur par défaut est 1440 (24 minutes).
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, utiliser cette directive
conjointement avec session.save_path.
-
session.referer_check
string
-
Contient une sous-chaîne
que l'on souhaite 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.
Avertissement
Définir session.referer_check à une valeur non vide
est obsolète à partir de PHP 8.4.0.
-
session.entropy_file
string
-
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.
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.
Note:
Supprimé dans PHP 7.1.0.
session.entropy_file vaut par défaut
/dev/urandom ou /dev/arandom
s'il est disponible.
-
session.entropy_length
int
-
Spécifie le nombre d'octets
qui seront lus dans le fichier défini ci-dessus. Par défaut 32.
Supprimé dans PHP 7.1.0.
-
session.use_strict_mode
bool
-
session.use_strict_mode spécifie si le module doit
utiliser le mode d'identifiant de session strict. Si ce mode est activé,
le module ne va pas accepter des identifiants de session non initialisés.
Si un identifiant de session non initialisé est envoyé depuis le navigateur,
un nouvel identifiant de session sera envoyé au navigateur. Les
applications sont protégées des fixations de session via l'utilisation
du mode strict des sessions.
Par défaut, vaut 0 (désactivé).
Note:
Activer session.use_strict_mode est obligatoire
pour la sécurité générale des sessions. Il est conseillé de l'activer pour
tous les sites. Voir l'exemple de code de
session_create_id() pour plus de détails.
-
session.use_cookies
bool
-
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.
-
session.use_only_cookies
bool
-
Spécifie si le module
doit utiliser seulement les cookies
pour stocker les identifiants de sessions du côté du navigateur.
En l'activant, l'on évitera les attaques qui utilisent des
identifiants de sessions dans les URL.
Par défaut, vaut 1 (activé).
Avertissement
Désactiver session.use_only_cookies est obsolète
à partir de PHP 8.4.0.
-
session.cookie_lifetime
int
-
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.
-
session.cookie_path
string
-
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().
-
session.cookie_domain
string
-
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().
-
session.cookie_secure
bool
-
Spécifie que les cookies ne doivent être émis que sur des
connexions sécurisées. Avec cette option définie
sur on, les sessions ne fonctionnent qu'avec des connexions HTTPS.
Si elle est définie sur off, alors les sessions fonctionnent avec les connexions HTTP et
HTTPS. Par défaut, elle est définie sur off.
Voir aussi
session_get_cookie_params() et
session_set_cookie_params().
-
session.cookie_httponly
bool
-
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 langages de script, comme Javascript.
Cette configuration permet de limiter les attaques comme les attaques XSS (bien
qu'elle ne soit pas supportée par tous les navigateurs).
-
session.cookie_samesite
string
-
Permet qu'un cookie ne soit pas envoyé par le serveur avec des requêtes entre sites
(cross-site). Cette assertion permet aux agents utilisateur de mitiger les risques
de fuite d'informations d'origine du site (cross-origin), et fournit de la
protection contre les attaques des fausses requêtes entre sites (cross-site request
forgery). Il est à noter que ceci n'est pas supporté par tous les navigateurs.
Une valeur vide signifie qu'aucun attribut SameSite ne sera défini.
Lax et Strict signifie que le cookie
ne sera pas envoyé pour des requêtes POST entre domaines ; Lax
enverra le cookie pour des requêtes GET entre domaines, tandis que Strict
n'en enverra pas.
-
session.cache_limiter
string
-
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_expire
int
-
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_sid
bool
-
Spécifie si le support du SID est transparent ou pas. Par défaut vaut 0
(désactivé).
Avertissement
Activer session.use_trans_sid est obsolète
à partir de PHP 8.4.0.
Note:
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.
À partir de PHP 7.1.0, le chemin URL complet, par exemple https://php.net/,
est géré par la fonctionnalité. Précédemment, PHP gérait le chemin relatif
uniquement. L'hôte cible de la réécriture est défini par session.trans_sid_hosts.
-
session.trans_sid_tags
string
-
session.trans_sid_tags spécifie les balises HTML qui
sont réécrites pour inclure l'ID de session lorsque le support du SID
transparent est activé. Par défaut
a=href,area=href,frame=src,form=
form est une balise spéciale. La variable de formulaire
<input hidden="session_id" name="session_name">
est ajoutée.
Avertissement
Modifier session.trans_sid_tags par rapport à sa
valeur par défaut est obsolète à partir de PHP 8.4.0.
Note:
Antérieur à PHP 7.1.0, url_rewriter.tags
était utilisé à cette fin. À partir de PHP 7.1.0,
fieldset n'est plus considéré comme une balise
spéciale.
-
session.trans_sid_hosts
string
-
session.trans_sid_hosts spécifie les hôtes qui sont
réécrits pour inclure l'ID de session lorsque le support du SID transparent
est activé. Par défaut $_SERVER['HTTP_HOST']. Plusieurs
hôtes peuvent être spécifiés séparés par ",", aucun espace n'est autorisé
entre les hôtes. Par exemple :
php.net,wiki.php.net,bugs.php.net
Avertissement
Définir session.trans_sid_hosts à une valeur non
vide est obsolète à partir de PHP 8.4.0.
-
session.sid_length
int
-
session.sid_length permet de spécifier la longueur
de la chaîne d'ID de session. La longueur de l'ID de session peut être
comprise entre 22 et 256.
La valeur par défaut est 32. En cas de besoin de compatibilité, il est possible de
spécifier 32, 40, etc. L'ID de session plus long est plus difficile
à deviner. Au moins 32 caractères sont recommandés.
Astuce
Note de compatibilité: utiliser 32 au lieu de
session.hash_function=0 (MD5) et
session.hash_bits_per_character=4,
session.hash_function=1 (SHA1) et
session.hash_bits_per_character=6. Utiliser 26 au lieu de
session.hash_function=0 (MD5) et
session.hash_bits_per_character=5. Utiliser 22 au lieu de
session.hash_function=0 (MD5) et
session.hash_bits_per_character=6.
Il faut configurer les valeurs INI pour qu'il y ait 128 bits dans
l'ID de session. Il ne faut pas oublier de définir la valeur appropriée à
session.sid_bits_per_character, sinon on aura des
ID de session plus faibles.
Note:
Disponible à partir de PHP 7.1.0.
-
session.sid_bits_per_character
int
-
session.sid_bits_per_character permet de spécifier le
nombre de bits dans le caractère codé dans l'ID de session. Les valeurs
possibles sont
'4' (0-9, a-f), '5' (0-9, a-v), et '6' (0-9, a-z, A-Z, "-", ",").
La valeur par défaut est 4. Plus de bits aboutit à un ID de session plus
fort. 5 est la valeur recommandée pour la plupart des environnements.
Note:
Disponible à partir de PHP 7.1.0.
-
session.hash_function
mixed
-
session.hash_function 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).
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:
Supprimé dans PHP 7.1.0.
-
session.hash_bits_per_character
int
-
session.hash_bits_per_character 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:
Supprimé dans PHP 7.1.0.
-
session.upload_progress.enabled
bool
-
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.cleanup
bool
-
Nettoie les informations de progression dès que toutes les données POST
ont été lues (c.-à-d. 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.prefix
string
-
Un préfixe utilisé pour la clé relative à la progression du téléchargement
dans le tableau $_SESSION. Cette clé sera concaténée 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.name
string
-
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.freq
mixed
-
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 (c.-à-d. "mettre à jour
les informations de progression de téléchargement tous les 100 octets"),
ou en pourcentage (c.-à-d. "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_freq
int
-
Le délai minimal entre les mises à jour, en secondes.
Par défaut, vaut "1" (une seconde).
-
session.lazy_write
bool
-
session.lazy_write, quand défini à 1, cela signifie que
la donnée de session ne sera réécrite que si celle-ci change. Par
défaut 1, activé.
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é.