Principe

Les sessions sont une alternative aux cookies, permettant de pallier les problèmes rencontrés.

Les sessions sont conservées sur le serveur. PHP envoie au navigateur un identifiant de session qui le conserve dans un cookie.

La session est perdue après la fin de la navigation.

La session permet de conserver une quantité d'information non limitée tout en empêchant un accès local aux données stockées.

Exemples d'utilisation

  • authentifier un utilisateur
  • garder des informations tout au long de la navigation
  • panier d'achat
  • formulaire en plusieurs parties
  • ...

Lecture et écriture

Pour utiliser une session, il faut faire un appel systématique dans chaque script faisant appel à la session à travers la méthode session_start

L'intéraction avec les données de la session s'effectue à travers le tableau associatif $_SESSION

Lecture

<?php
session_start();
if(isset($_SESSION['valeur']))
{
	echo $_SESSION['valeur'];
}
?>

Ecriture

<?php session_start(); $_SESSION['valeur'] = 'donnee'; ?>

Fonctionnement

L'identifiant de session est la valeur stockée dans le cookie PHPSESSID.

La valeur de cet identifiant est aléatoire.

Les variables sont stockées dans le tableau $_SESSION[]

Par défaut, le serveur efface les fichiers inutilisés depuis une heure et demie.

Les fonctions suivantes permettent d'autres intéractions avec la sessions :

session_id
Identifiant actuel / permetde changer l'identifiant.
session_name
par défaut PHPSESSID.
session_save_path
répertoire de stockage.
session_set_cookie_params
paramètres du cookie.

Exemple

<?php
session_save_path("/tmp");
session_start();
$_SESSION['cle'] = 'valeur';
?>
<html>
<head><title>Session</title></head>
<body>
<h1>Session</h1>
<?php
if(isset($_SESSION['cle']))
{
	echo $_SESSION['cle'] . "<br>";
	echo session_id() . "<br>";
	echo "Stockage : " . session_save_path();
}
?>
</body>
</html>
Le résultat est visible dans l'exemple.

Suppression

La suppression d'une session s'effectue par l'appel à la fonction session_destroy et la suppression du tableau $_SESSION.

<?php
session_start();
session_destroy();
unset($_SESSION);
?>

Configuration

Le comportement des sessions est modifiable à travers différents paramètres. Ces paramètres sont visibles dans les informations de configuration du serveur, au paragraphe session.

Initialisation

  • session.name
  • session.auto_start évite le session_start() mais empêche les modification de comportement dans les scripts

Stockage

  • session.serialize_handler
  • session.save_path

Cookie

  • session.cookie_lifetime
  • session.cookie_path
  • session.cookie_domain
  • session.cookie_secure

Expiration

  • session.gc_probability tirage aléatoire entre 0 et 99
  • session.gc_maxlifetime

Cache

  • session.cache_limiter
    public
    Les proxies et les navigateurs peuvent resservir à tous les utilisateurs
    private_no_expire
    utilisateur seulement, pas d'appel au serveur
    private
    utilisateur seulement, pas d'appel au serveur, expire
    nocache
    valeur par défaut pour les sessions; seule sauvegarde : backtrack
    none
    aucune sauvegarde
  • session.cache_expire (pour private ou public)

Limitations et sécurité

Les sessions sont stockées sur le serveur, non chiffrées.

Il faut éviter la transmission des informations par URL.

Les identifiants par défaut suffisent.

Eviter les informations sensibles.

Exercice