3.24 Http et la conservation d’informations sur les clients
3.24.1 Problème
Le protocole HTTP est un protocole sans mémoire. Une requête d’un client ou les informations qui y sont rattachées ne sont pas mémorisées par défaut.
Plusieurs techniques ont été développées pour remédier à ce manque :
— Envoyer de l’information sur l’URL
— Utiliser un champ caché HTML
— Utiliser des Cookies
— Utiliser des Sessions
Utiliser des cookies :
L’information est stockée dans un petit fichier texte sur le navigateur du client. On peut par
exemple s’en servir pour stocker un identifiant de session, un login, un compteur de visites ou encore mesurer un temps de connexion.
|
Index.php </head> <body> <?php if (!isset($_COOKIE['login'])){ ?> <form method='GET' action=page2.php>
<p>Login: <input type="text" name="login"></p> <input type="submit" value="Valider"> </form>
<?php } else {
header('Location:page2.php?login='.$_COOKIE['login']); } ?> </body> |
page2.php <!doctype html> <html lang="fr"> <head> <meta charset="utf-8"/> <title>Formulaires</title> </head> <body> <?php if (isset($_COOKIE ['login'])){ echo "bonjour et bon retour".$_COOKIE ['login']; } else { setcookie("login", $_GET['login'], time()+100); echo "bonjour ".$_GET['login']; } ?> </body> </html> |
Mais si on a des informations en plus grand nombre à stocker ou qui revètent un caractère
plus sensible, on préférera les stocker essentiellement côté serveur et utiliser le mécanisme plus complet des sessions. Celui-ci consiste à utiliser le tableau associatif _SESSION[] qui permet de stocker toute sorte d’informations associées à ce client (données de type nombres ou chaines, tableaux ou objets PHP).
Considérons une première page mettant en place une session :
|
</head> <body> <?php session_start(); if (!isset($_SESSION['login'])){ ?> <form method='GET' action=page2.php>
<p>Login: <input type="text" name="login"></p> <input type="submit" value="Valider"> </form>
<?php } else {
header('Location:page2.php?login='.$_SESSION['login']); } ?> </body> |
<!doctype html> <html lang="fr"> <head> <meta charset="utf-8"/> <title>Formulaires</title> </head> <body> <?php session_start(); if (isset($_SESSION ['login'])){ echo "bonjour et bon retour".$_SESSION['login']; } else { $_SESSION['login']=$_GET['login']; echo "bonjour ".$_GET['login']; } ?> </body> </html> |