Les variables de session et les cookies

Les variables de session

Les sessions constituent un moyen de conserver des variables sur toutes les pages de votre site.
Dans le chapitre précédent nous avons vu que l'on pouvez faire passer des données d'une page à une autre en "bidouillant" la valeur de l'attribut href d'un lien. Nous avions, par exemple, le code HTML suivant pour les différents liens dans la page d'accueil :

<a href ="index.php?nom=Darcheville&prenom=Patrick">Accueil</a> <a href ="page1.php?nom=Darcheville&prenom=Patrick">Page 1</a> <a href ="page2.php?nom=Darcheville&prenom=Patrick">Page 2</a> <a href ="page3.php?nom=Darcheville&prenom=Patrick">Page 3</a>

Faut-il rappeler que cette technique revient à faire envoyer dans la page cible des données soumissionnées avec un formulaire de type GET. Donc le gros inconvénient c'est que les données s'affichent dans la barre d'URL. C'est très génant quand ces données sont des identifiants et des mots de passe.

Le fonctionnement des sessions

Un visiteur arrive sur votre site. PHP génère alors un numéro de session. Ce numéro sert d'identifiant. Une fois la session générée on peut créer une infinité de variables de session. Par exemple, on peut créer une variable $_SESSION['pseudo'] qui contient le pseudo du visiteur, $_SESSION['age'] qui contient son âge, etc.
Le serveur conserve ces variables même lorsque vous changez de page car $_SESSION est certes un array mais aussi une variable superglobale.
Lorsque le visiteur se déconnecte de votre site, la session est fermée et alors les variables de session sont supprimées.

Les variables sessions sont utilisées sur les sites de vente en ligne pour gérer un « panier ».

Exemple de site utilisant des variables de session

Examinons le code de certaines pages d'un site utilisant les variables de session.

Le code de la page d'accueil (extraits)

<?php session_start() ; ?> <!doctype html> <html> ... </head> <body> <h3>Saisissez votre pseudo</h3> <?php if (!isset($_SESSION['pseudo'])) { echo '<form method ="post" action ="#">'; echo '<label>Votre pseudo</label><input type ="text" name ="pseudo" />'; echo '<label></label><button type = "submit">Validez</button>'; echo '</form>'; if (isset($_POST['pseudo'])) {$_SESSION['pseudo']=$_POST['pseudo'];} } else echo "<h3>votre pseudo : " . $_SESSION['pseudo'] . "</h3>"; ?> <a href ="session_page1.php">page 1</a> <a href ="session_page2.php">page 2</a> ... <a href ="session_fin.php">Quittez le site</a> ...

L'instruction PHP session_start() doit être la première instruction de chaque page dans laquelle vous manipulez les variables de session.

Si la variable de session n'existe pas encore le formulaire s'affiche pour la saisir. Si elle existe elle est affichée.

La page comprend trois liens vers les autres pages du site.

Le code de la page "session_page1.php" (extraits)

<?php session_start() ; ?> <!doctype html> <html> ... <body> <h3> <?php if (isset($_SESSION['pseudo'])) {echo "Bienvenu sur la page 1 du site cher(e) " . $_SESSION['pseudo']; } else echo "vous n'avez pas saisi votre pseudo dans le formulaire de la page d'accueil" ; ?> </h3> <a href ="session_accueil.php">Retour accueil</a> ...

On se contente d'afficher la valeur de la variable de session si elle existe. Si elle n'existe pas on rappelle au visiteur qu'il peut le faire. Ne pas oublier l'instruction session_start() au tout début de la page.

Le code de la page "session_page2.php" (extraits)

Il est identique à celui de la page précédente sauf une légende qui devient :"bienvenu sur la page 2 ..."

Le code de la page "session_fin.php"

<?php session_start() ; ?> <!doctype html> <html> ... <body> <h3> <?php echo "A très bientôt cher(e) " . $_SESSION['pseudo']; session_destroy(); ?> </h3> ...

Notez l'instruction session_destroy() qui supprime toutes les variables de session.

Testez ce site utilisant des variables de session

Visitez d'abord les pages 1 et 2 sans avoir renseigné le formulaire de la page d'accueil puis saisissez votre pseudo avant de revisiter les mêmes pages. Et pour terminer accèdez à la page fin.
Bonne visite !

Les cookies

En général lorsque vous visitez un site ce dernier vous informe qu'il utilise des cookies.
Les cookies ont mauvaise réputation alors qu'ils ne présentent aucune danger pour votre ordinateur et de plus comme ils sont installés sur votre machine vous avez toujours la main : vous pouvez les supprimer quand vous voulez.

Un cookie, c'est un petit fichier qui est enregistré sur l'ordinateur du visiteur.
Ce fichier contient du texte et permet de « retenir » des informations sur le visiteur. Par exemple, vous enregistrez dans un cookie le pseudo du visiteur, comme ça la prochaine fois qu'il viendra sur votre site, vous pourrez lire son pseudo en allant regarder ce que son cookie contient.
Les cookies sont juste de petits fichiers texte qui permettent de retenir des informations. Au pire, un site commercial peut retenir que vous aimez les voitures de sport et vous afficher uniquement des pubs pour des bolides.
Personnellement je supprime sous Chrome les données de navigation et en particulier l'historique de navigation mais aussi les cookies.

La variable superglobale $_COOKIE() de PHP contient tous les cookies !

Création d'un cookie

Pour écrire un cookie il faut utiliser la fonction setcookie().

Il faut expliquer le troisième argument.
Faut-il rappeler qu'un timestamp est le nombre de secondes écoulées depuis le 1er janvier 1970.

Pour obtenir le timestamp de l'instant présent il suffit d'utiliser la fonction time().
Pour définir un cookie qui va disparaître un mois après sa création il suffit donc d'écrire le troisième argument de la façon suivante : time() + 30*24*60*60.
Une journée c'est 24 heures de 60 minutes et une minute c'est 60 secondes.

Exemple de site utilisant des coookies

Le code de la page d'accueil

... <body> <h3> <?php if (isset($_COOKIE['pseudo'])) {echo 'Bonjour '.$_COOKIE['pseudo'];} else { echo 'Identifiez vous !'; echo '<form action="cookie_creer.php" method="post">'; echo '<label>Votre pseudo</label><input type = "text" name = "pseudo">'; echo '<label></label><input type = "submit" value = "Valider">'; echo'</form>'; } ?> </h3> <a href ="cookie_page1.php">page 1</a> <a href ="cookie_page2.php">page 2</a> ...

Si le cookie $_COOKIE['pseudo']) n'existe pas (ou n'existe plus car il a expiré ou a été supprimé par l'utilisateur) alors un formulaire est affiché pour la saisir.

Notez que le pseudo saisi est envoyé dans une autre page : "cookie_creer.php"

Attention il ne doit y avoir aucun code HTML avant l'instruction setcookie(). C'est pour cette raison que je suis obligé de créer le cookie dans une autre page.

Le code de la page "cookie_creer.php"

<?php $pseudo =$_POST['pseudo']; $duree = 31*24*60*60; setcookie('pseudo',$_POST['pseudo'] , time() + $duree); //création du cookie ?> <html><head> <meta http-equiv="refresh" content="2;cookie_accueil.php"> <link href ="../style.css" rel = "stylesheet" > <meta charset = 'utf-8'> <meta name="viewport" content= "width=device-width, user-scalable=yes" /> </head> <body> <h3>Votre pseudo est désormais mémorisé pour une durée de 30 jours sauf si vous supprimez les cookies</h3> </body></html>

Il n'y a pas de code HTML avant l'instruction PHP setcookie.

La redirection automatique vers la page d'accueil est réalisée en HTML avec la balise meta contenant les attributs http-equiv et content.
On aurait pu aussi utiliser la fonction header de PHP.

Le code la page 1 (ou de la page 2)

... <body> <h3> <?php if (isset($_COOKIE['pseudo'])) {echo 'Rebonjour '.$_COOKIE['pseudo'];} else echo "vous n'avez pas saisi votre pseudo dans le formulaire de la page d'accueil" ; ?> </h3> <a href ="cookie_accueil.php">Retour accueil</a> ...

Testez ce site avec cookies

Visitez d'abord les pages 1 et 2 sans avoir renseigné le formulaire de la page d'accueil puis saisissez votre pseudo avant de revisiter les mêmes pages.
Déconnectez vous du site puis reconnectez vous quelques instants plus tard. Votre pseudo s'affiche. Le site vous a reconnu ! Bonne visite !

Le stockage des cookies

La gestion est effectuée par le navigateur.
Sous Chrome la commande pour afficher les cookies stockés par le navigateur est :
Paramètres/afficher les paramètres avancés / paramètres de contenu / cookies et données du site

Ci-dessous une capture d'écran indiquant le contenu du cookie $_SESSION['pseudo'] créé par le domaine "localhost".

Donc deux cookies peuvent avoir le même nom à condition qu'ils appartiennent à des domaines différents !
Retour menu