PHP : Coder proprement un cookie
Création du fichier de gestion de cookie
- La variable $host permet de récupèrer le nom du serveur.
- La variable $validite permet de définir le temps de validité du cookie.
Il se calcule en secondes. - La variable $redirection permet de récupèrer l'adresse de la page à partir de laquelle est envoyée le cookie ...
Écriture du fichier cookies.php :
<?php
$host = $_SERVER['HTTP_HOST'];
$validite = time() + 60 * 60 * 24; // un jour en secondes
if(isset($_GET['uri'])) {
// si l'adresse de la page en cours est passée en méthode GET, dans l'URL
$redirection = strip_tags($_GET['uri']);
}
elseif(isset($_POST['uri'])) {
// si l'adresse de la page en cours a été passée en méthode POST, dans les en-têtes HTTP
$redirection = strip_tags($_POST['uri']);
}
elseif(isset($_COOKIE['uri'])) { $redirection = strip_tags($_COOKIE['uri']); }
else $redirection = 'http://'.htmlspecialchars($_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']);
if(isset($_GET['service'])) $service = strip_tags($_GET['service']);
elseif(isset($_POST['service'])) $service = strip_tags($_POST['service']);
elseif(isset($_COOKIE['service'])) $service = strip_tags($_COOKIE['service']);
else $service = ''; // valeur par defaut !!!
// on vérifie qu'il s'agit bien d'un lien interne
// il doit commencer par http://mon.nomdedomaine.com/
if (strpos($redirection, 'http://'.$_SERVER['SERVER_NAME'].'/') === false
|| strpos($redirection, 'http://'.$_SERVER['SERVER_NAME'].'/') != 0) {
$redirection = 'http://'.$_SERVER['SERVER_NAME'].'/';
}
setcookie('monCookie', $service, $validite, '/', $host, 0, 1);
// on n'utilise pas le HTTP_REFERER car ce n'est pas fiable et les proxy ne l'envoient pas
header('Location: '.$redirection);
?>
Créer un formulaire d'envoi de cookies
Voici ci-dessous le code html pour créer un formulaire html, dans un script appelant le fichier cookies.php.
<div id="services">
<form action="cookies.php" method="post">
<fieldset>
<legend>Choix :</legend>
<label for="service">Faites votre choix :</label>
<select name="service" id="service">
<optgroup label="choix">
<option label="Choix 1" value="1">Premier choix</option>
<option label="Choix 2" value="2" selected="selected">Second choix</option>
<option label="Choix 3" value="3">Troisième choix</option>
</optgroup>
</select>
<p><input type="hidden" name="uri" id="uri" value="http://mon.nomdedomaine.com/" />
<label for="pagine">Envoyez : </label>
<input type="submit" name="pagine" id="pagine" value="Envoi !"/></p>
</fieldset>
</form>
</div>
On remarquera tout particulièrement le champ input caché permettant de récupèrer l'url en cours, afin de vérifier la provenance du cookie dans le fichier de cookies.
<<| Page : PHP : code : cookies : |>>