Le problème
On veut pouvoir conserver des informations d’une page sur l’autre, comme l’identifiant de l’utilisateur connecté (pour ne pas avoir à se reconnecter à chaque page), tout en empêchant autant que possible l’usurpation d’identité.
Dans les exemples présentés ici, on se limitera à transmettre le contenu d’une variable, nommée $test
, d’une exécution à l’autre d’un même script, en précisant quand et comment un utilisateur a la possibilité de modifier cette valeur.
La variable
Une variable n’est conservée que pendant l’exécution courante d’un script. Si on charge un autre script, ou même si on recharge le script courant, le contenu des variables est perdu :
<?php
if(! isSet($test))
$test = "toto";
?>
<!DOCTYPE html>
<html dir="ltr" xml:lang="fr-FR" lang="fr-FR">
<head>
<meta charset="utf8" />
<title>Test variable</title>
<meta name="author" content="Christophe Prieur" />
</head>
<body>
<?php
echo "<p>$test</p>";
$test = "tutu";
echo "<p>$test</p>";
?>
<p>Rechargez la page pour voir si la valeur de la variable est conservée</p>
</body>
</html>
Résultat ici.
GET
On peut alors transmettre le contenu d’une variable comme paramètre du script :
<?php
if(isSet($_GET["test"]))
$test = htmlentities($_GET["test"]);
else
$test = "toto";
?>
<!DOCTYPE html>
<html dir="ltr" xml:lang="fr-FR" lang="fr-FR">
<head>
<meta charset="utf8" />
<title>Test get</title>
<meta name="author" content="Christophe Prieur" />
</head>
<body>
<?php
echo "<p>$test</p>";
$test = "tutu";
echo "<p>$test</p>";
?>
<p>
<?php
echo "<a href=\"?test=$test\">";
echo "Recharger en conservant la valeur</a>.";
?>
</p>
</body>
</html>
Résultat ici.
La méthode get est faite pour que l’utilisateur puisse changer facilement le paramètre (comme dans le cas d’une requête à un moteur de recherche par exemple), en le tapant directement dans la barre d’adresse. Par conséquent,
on a utilisé ici htmlentities
pour « neutraliser » les éventuels caractères spéciaux qui permettraient à l’utilisateur d’envoyer du code html, d’autant qu’on affiche la valeur transmise.
Exemple de tentative d’affichage d’une image :
qui se solde par un échec, grâce à htmlentities
:
Si on veut empêcher l’utilisateur de fixer lui-même la valeur de la variable, on doit utiliser une autre méthode.
POST
Avec la méthode post, le paramètre ne passe pas par l’url :
<?php
if(isSet($_POST["test"]))
$test = htmlentities($_POST["test"]);
else
$test = "toto";
?>
<!DOCTYPE html>
<html dir="ltr" xml:lang="fr-FR" lang="fr-FR">
<head>
<meta charset="utf8" />
<title>Test get</title>
<meta name="author" content="Christophe Prieur" />
</head>
<body>
<?php
echo "<p>$test</p>";
$test = "tutu";
echo "<p>$test</p>";
?>
<p>
<form action="" method="post">
<?php
echo '<input type="hidden" name="test" value="'
. $test . '" />';
?>
<input type="submit" value="Recharger en conservant la valeur" />
</form>
</p>
</body>
</html>
Résultat ici.
La modification de la variable n’est donc plus à la portée de n’importe quel utilisateur comme c’est le cas avec get, mais elle reste néanmoins triviale pour un développeur web, puisqu’il suffit de répliquer le formulaire dans n’importe quel script php en indiquant l’adresse du script ci-dessus :
<html dir="ltr" xml:lang="fr-FR" lang="fr-FR">
<head>
<meta charset="utf8" />
<title>Test post</title>
<meta name="author" content="Christophe Prieur" />
</head>
<body>
<p>
<form action="param-post.php" method="post">
<input type="hidden" name="test" value="je suis un tricheur">
<input type="submit" value="Charger avec ma valeur" />
</form>
</p>
</body>
</html>
Résultat ici.
Cette méthode permet donc de transmette des paramètres dont on ne souhaite pas que le contenu ou le nom soient immédiatement visibles, mais ici encore,
si on veut empêcher l’utilisateur de fixer lui-même la valeur de la variable, on doit utiliser une autre méthode.
Les cookies
Les cookies sont des informations stockées sur le client (donc le navigateur) à la demande du serveur.
Pour placer un cookie sur le client, on utilise la fonction setcookie
:
setcookie(paramètre, valeur)
setcookie(paramètre, valeur, time() + s)
, pour fixer une durée de vie s en secondes.
Attention La fonction setcookie
doit être appelée avant tout affichage, sinon elle se solde par un échec. En particulier, il ne doit y avoir aucun caractère (même un espace ou un saut de ligne) entre le début du fichier et la balise php.
On récupère les valeurs des paramètres au moyen de $_COOKIE[paramètre]
ou de $_REQUEST[paramètre]
(ce dernier permet également de récupérer un paramètre transmis par get ou post). Ces variables ne peuvent être utilisées qu’un lecture (pour modifier la valeur de $_COOKIE
, il faut utiliser la fonction setcookie
).
<?php
if(isSet($_COOKIE["test"]))
$test = htmlentities($_COOKIE["test"]);
else
$test = "toto";
$newtest = "tutu";
$res = setcookie("test", $newtest, time() + 300);
?>
<!DOCTYPE html>
<html dir="ltr" lang="fr-FR">
<head>
<meta charset="utf8" />
<title>Test cookie</title>
<meta name="author" content="Christophe Prieur" />
</head>
<body>
<?php
echo "<p>$test</p>";
$test = $newtest;
echo "<p>$test</p>";
?>
<p>
<?php
if($res)
echo "Le cookie a bien été envoyé, rechargez la page pour tester.";
else
echo "Le cookie n'a pas pu être envoyé, laissez-moi tranquille !";
?>
</p>
</body>
</html>
Résultat ici. La durée de vie du cookie a été mise à 5 minutes (300 secondes) pour permettre des tests.
Les cookies sont utilisés notamment pour stocker des informations sur la navigation de l’utilisateur (préférences) sans qu’il soit identifié. Comme ils sont stockés par le navigateur, sur le disque de l’utilisateur, il lui est toujours possible d’y accéder, de les afficher, voire de les modifier (au moyen d’extensions Firefox, Chrome ou Opera).
Par conséquent, ici encore, si on veut vraiment empêcher l’utilisateur de fixer lui-même la valeur de la variable, on doit utiliser une autre méthode.
Les sessions
C’est un mécanisme de php pour stocker des informations sur le serveur entre deux visites d’un même utilisateur en limitant l’information transmise par le client à une seule valeur, l’identifiant de session, générée au moyen d’un procédé cryptographique qui rend extrêmement difficile sa falsification.
L’identifiant de session est transmis sans même que le programmeur n’ait à s’en soucier, au moyen d’un cookie, ou de la méthode get si le navigateur est configuré pour ne pas accepter les cookies.
Pour démarrer une session ou reprendre une session existante, on utilise la fonction session_start
(sans paramètres), qui renvoie un booléen indiquant si l’opération a réussi.
On fixe ensuite les valeurs des paramètres que l’on souhaite au moyen de $_SESSION[paramètre]
, qui peut être utilisé en lecture comme en écriture (contrairement à $_COOKIE
, $_REQUEST
, $_GET
et $_POST
, qui ne s’utilisent qu’en lecture).
Attention Comme pour setcookie
, la fonction session_start
doit être appelée avant tout affichage, sinon elle se solde par un échec. En particulier, il ne doit y avoir aucun caractère (même un espace ou un saut de ligne) entre le début du fichier et la balise php.
<?php
$res = session_start();
if(isSet($_SESSION["test"]))
$test = htmlentities($_SESSION["test"]);
else
$test = "toto";
$newtest = "tutu";
?>
<!DOCTYPE html>
<html dir="ltr" lang="fr-FR">
<head>
<meta charset="utf8" />
<title>Test session</title>
<meta name="author" content="Christophe Prieur" />
</head>
<body>
<?php
echo "<p>$test</p>";
$_SESSION["test"] = $test = $newtest;
echo "<p>$test</p>";
?>
<p>
<?php
if($res)
echo "La session a bien été créée, rechargez la page pour tester.";
else
echo "La session n'a pas pu être créée, laissez-moi tranquille !";
?>
</p>
</body>
</html>
Résultat ici.
Pour fermer la session, on utilise session_destroy
(sans paramètres),
qui renvoie un booléen indiquant si l’opération a réussi.
Pour plus de détails sur les sessions php, consulter la documentation php sur la gestion des sessions
Hello there
Looking to improve your posture and live a healthier life? Our Medico Postura™ Body Posture Corrector is here to help!
Experience instant posture improvement with Medico Postura™. This easy-to-use device can be worn anywhere, anytime – at home, work, or even while you sleep.
Made from lightweight, breathable fabric, it ensures comfort all day long.
Grab it today at a fantastic 60% OFF: https://medicopostura.com
Plus, enjoy FREE shipping for today only!
Don’t miss out on this amazing deal. Get yours now and start transforming your posture!
Kind Regards,
Heather
PawSafer™ Can Safely Trim Your Dog’S Nails In No Time From Home.
Get it while it’s still 50% OFF + FREE Shipping
Buy here: https://pawsafer.sale
Best Wishes,
Carri
New Multifunction Waterproof Backpack
The best ever SUPER Backpack: Drop-proof/Scratch-resistant/USB Charging/Large capacity storage
50% OFF for the next 24 Hours ONLY + FREE Worldwide Shipping for a LIMITED time
Buy now: https://thebackpack.co
Thank You,
Silas
Good Morning
The New Powerful LED Flashlight is The Perfect Flashlight For Any Situation!
The 3,000 Lumens & Adjustable Zoom gives you the wide field of view and brightness other flashlights don’t have.
50% OFF + Free Shipping! Get it Now: https://linterna.cc
The Best,
Brianna
World’s Best Neck Massager Get it Now 50% OFF + Free Shipping!
Wellness Enthusiasts! There has never been a better time to take care of your neck pain!
Our clinical-grade TENS technology will ensure you have neck relief in as little as 20 minutes.
Get Yours: https://hineck.co
Best regards,
Juliana
Cours 9 : conserver des informations | didiode
Hi
Looking to improve your posture and live a healthier life? Our Medico Postura™ Body Posture Corrector is here to help!
Experience instant posture improvement with Medico Postura™. This easy-to-use device can be worn anywhere, anytime – at home, work, or even while you sleep.
Made from lightweight, breathable fabric, it ensures comfort all day long.
Grab it today at a fantastic 60% OFF: https://medicopostura.com
Plus, enjoy FREE shipping for today only!
Don’t miss out on this amazing deal. Get yours now and start transforming your posture!
Thanks and Best Regards,
Jacquelyn
Hi,
If you are one of the sufferers of the common problems nails have, then you are in luck! Our Toenail Clippers is here to help. It has a specially designed clip that can help those with troubles with winding nails, hard nails, two nails, nail cracks, deep nails, and thickened nails.
We are confident that our Toenail Clippers will provide you with the results you are looking for.
Get yours today with 60% OFF: https://podiatristusa.sale
Many Thanks,
Ola
Hi there
I wanted to reach out and let you know about our new dog harness. It’s really easy to put on and take off – in just 2 seconds – and it’s personalized for each dog.
Plus, we offer a lifetime warranty so you can be sure your pet is always safe and stylish.
We’ve had a lot of success with it so far and I think your dog would love it.
Get yours today with 50% OFF: https://caredogbest.com
FREE Shipping – TODAY ONLY!
Regards,
Esther
Good day
Defrost frozen foods in minutes safely and naturally with our THAW KING™.
50% OFF for the next 24 Hours ONLY + FREE Worldwide Shipping for a LIMITED
Buy now: https://thawking.co
The Best,
Lourdes
New Multifunction Waterproof Backpack
The best ever SUPER Backpack: Drop-proof/Scratch-resistant/USB Charging/Large capacity storage
50% OFF for the next 24 Hours ONLY + FREE Worldwide Shipping for a LIMITED time
Buy now: https://thebackpack.co
To your success,
Magda
Morning,
I hope this email finds you well. I wanted to let you know about our new BANGE backpacks and sling bags that just released.
The bags are waterproof and anti-theft, and have a built-in USB cable that can recharge your phone while you’re on the go.
Both bags are made of durable and high-quality materials, and are perfect for everyday use or travel.
Order yours now at 50% OFF with FREE Shipping: http://bangeshop.com
Best regards,
Enriqueta
Hey there
I wanted to reach out and let you know about our new dog harness. It’s really easy to put on and take off – in just 2 seconds – and it’s personalized for each dog.
Plus, we offer a lifetime warranty so you can be sure your pet is always safe and stylish.
We’ve had a lot of success with it so far and I think your dog would love it.
Get yours today with 50% OFF: https://caredogbest.com
FREE Shipping – TODAY ONLY!
The Best,
Linnea
Hey there
Looking to improve your posture and live a healthier life? Our Medico Postura™ Body Posture Corrector is here to help!
Experience instant posture improvement with Medico Postura™. This easy-to-use device can be worn anywhere, anytime – at home, work, or even while you sleep.
Made from lightweight, breathable fabric, it ensures comfort all day long.
Grab it today at a fantastic 60% OFF: https://medicopostura.com
Plus, enjoy FREE shipping for today only!
Don’t miss out on this amazing deal. Get yours now and start transforming your posture!
Best Wishes,
Deb