PHP : Coder proprement un cookie

Création du fichier de gestion de 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) {
        /* tentative de piratage ? on remplace par la racine du site */
        $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&nbsp;:</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&egrave;me choix</option>
</optgroup>
</select>
<p><input type="hidden" name="uri" id="uri" value="http://mon.nomdedomaine.com/" />
<label for="pagine">Envoyez&nbsp;: </label>
<input type="submit" name="pagine" id="pagine" value="Envoi&nbsp;!"/></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 : |>>


 

 

^ Haut de page ^