Les variables de Session en PHP (Comment garder en mémoire une info)

Définition

En PHP, les variables de session sont des variables qui peuvent être stockées sur le serveur et associées à une session unique utilisateur.
Chaque connexion au serveur web depuis un navigateur Internet déclanche la création d'une session entre le serveur et le navigateur.
Une session contient un identifiant unique (clé de session), et c'est cette clé qui est associée aux diférentes variables de session d'un utilisateur.
Les variables de session permettent de stocker des données persistantes pour un utilisateur donné au cours de plusieurs requêtes HTTP.

Exemples d'utilisation

Les variables de session sont très utiles pour les sites avec authentification (login + password).
La session permet de garder en mémoire les informations de connexion et les identifiants utilisateur pendant la durée de navigation.
Ce qui évite de demander une nouvelle authentification à chaque changement de page.
Elles peuvent aussi garder en mémoire les préférences d'un utilisateur pendant son temps de navigation sur le site.

Voir le fonctionnement des variables de session PHP (SuperGlobales)

https://www.php.net/manual/fr/reserved.variables.session.php

Utilisation

Pour utiliser les variables de session en PHP, vous devez d'abord démarrer une session avec la fonction PHP session_start().
Ensuite, vous pouvez enregistrer des données dans la session en assignant des valeurs à des variables de session comme ceci :

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

Vous remarquez qu'une variable de session est en fait un tableau PHP qui porte toujours le même nom $_SESSION.
Le tableau fonction avec le couple clé -> valeur où la clé sera le nom de votre variable.

Vous pouvez accéder à une variable de session en utilisant le nom de votre variable entre crochets, comme ceci :

<?php
echo $_SESSION['nom_variable'];
?>

Il est important de noter que les variables de session sont associées à un utilisateur donné et ne sont accessibles que pour cet utilisateur sur un navigateur donné.
Si un utilisateur accède à votre site à partir de plusieurs navigateurs ou ordinateurs, ils auront des sessions distinctes pour chacun d'entre eux.

Il est également important de noter que les variables de session sont stockées sur le serveur, ce qui les rend plus sûres que les cookies, qui sont stockés sur l'ordinateur de l'utilisateur.
Cependant, cela signifie également que les données de session ne sont pas accessibles en dehors de votre serveur.

Déstruction des Sessions

Les variables de session disparaissent dès que l'utilisateur ferme son navigateur Internet.

Si vous avez besoin de vider votre tableau de session pour le réinitialiser vous pouvez simplement écraser les valeurs du tableau comme ceci :
<?php
$_SESSION = array();//On écrase le contenu de $_SESSION avec un talbeau vide
?>

Il n'est pas conseilé d'utiliser les fonctions PHP session_destroy() et session_unset() qui comportent des contraintes et des risques pour la réutilisation des sessions dans votre code.

<?php
unset($_SESSION['nomDeSession']);//On supprime la référence mémoire de la session 'nomDeSession'
/*** A ne surtout pas faire ****/
unset($_SESSION[]);//On supprime totalement la référence mémoire de la session. Il ne sera plus possible d'utiliser les sessions !
?>

Durée de vie d'une session

Une session a une durée de vie limitée dans le temps.
Elle peut être configurée de plusieurs manières dans le fichier de configurtation de PHP (PHP.ini).

Le fichier PHP.ini

Si vous utilisez wamp serveur, vous trouverez le fichier PHP.ini dans le menu de votre serveur web dans le menu de la partie PHP. Ouvrez le fichier dans bloc note et chercher les lignes contenant les instructions suivantes :

session.gc_maxlifetime = 1440

Indique le nombre de secondes pendant lequel la session peut restée active après la dernière action de l'internaute (ex : après le dernier chargement de page). La valeur par defaut est 1440 secondes (24 minutes). Vous avez 24 minutes avant de faire une nouvelle demande de page sinon la session sera effacée.

session.cookie_lifetime = 0

Indique le nombre de secondes après lequel la session sera réinitialisée, que l'internaute soit actif ou pas (que vous changiez de page ou non).
Par defaut la valeur est à 0.
La valeur 0 signifie que la session ne sera pas détruite automatiquement tant que le navigateur sera ouvert (pas de limite de temps).
Mais une fermeture du navigateur causera automatiquement la destruction de la session.

Si on remplacait 0 par 3600 alors la durée maximale de la session serait de une heure quoi qu'il arrive.
Après ce temps, la session est automatiquement effacée même si l'utilisateur navigue encore sur le site.
Par contre, l'usager pourrait fermer son navigateur puis le réouvrir et, s'il retourne sur le site Web avant que le délai soit dépassé, sa session serait toujours vivante.

Modifier la configuration de php.ini dans le code PHP

Vous pouvez modifier le comportement de PHP diretement dans un script PHP.
Cette modification durera le temps de l'execution du script PHP et uniquement pour ce script.
C'est la fonction ini_set() qui permet de modifier une configuration de php.ini sans modifier ce fichier.

<?php
ini_set('session.gc_maxlifetime', 7200);

Attention : cette instruction doit être placée AVANT le session_start() pour qu'elle soit prise en compte.

<?php
// Durée de vie d'une session (en secondes)
$lifetimeSession = 60 * 60; // une heure
$lifetimeCookie = 60 * 60 * 24; // une journée

// Modification de la durée de vie d'une session après la derniere action utilisateur
ini_set('session.gc_maxlifetime', $lifetime);

// Modifier la durée de vie du cookie de session
ini_set('session_set_cookie_params', $lifetimeCookie);

// Démarrer la session
session_start();

Sources : https://apical.xyz/fiches/passer_de_l_information_entre_les_pages_web/Modifier_la_duree_de_vie_d_une_session