PHP setcookie() ne fonctionne pas
J'ai cette page qui définit un cookie et les echos une chaîne si vous cochez une case à cocher. La chaîne s'imprime correctement, mais le cookie n'est jamais fixé et je n'ai aucune idée pourquoi.
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
<label for="checkbox">Option 1:</label>
<input type="checkbox" name="checkbox" id="checkbox"><br>
<input type="submit" name="submit" value="Submit">
</form>
<?php
if (isset($_POST['checkbox'])) {
setcookie("cookie", "on", time()+3600*24);
echo "You checked the checkbox and a cookie was set with a value of:<br>";
}
else {
setcookie("cookie", "off", time()+3600*24);
echo "You didn't check the checkbox and a cookie was set with a value of:<br>";
}
echo $_COOKIE['cookie'];
?>
Personne ne sait pourquoi le code ci-dessus ne fonctionne pas?
OriginalL'auteur Tim | 2014-07-09
Vous devez vous connecter pour publier un commentaire.
PHP superglobales sont peuplées au script de démarrage de temps, et ne sont donc PAS modifiés ou touché par PHP à nouveau pour la vie du script. Cela signifie que
$_COOKIE
représente les cookies qui ont été envoyées au serveur dans la requête http qui a lancé le script. Il ne sera PAS montrer tous les cookies que vous avez ajoutés/modifiés/supprimés au cours de la vie du script. Ces changements ne s'affiche que sur la demande SUIVANTE.La seule exception à cette règle est
$_SESSION
, qui est rempli lorsque vous appelezsession_start()
.Si vous avez besoin de ces valeurs dans $_COOKIE immédiatement, vous devez les ajouter manuellement, par exemple
OriginalL'auteur Marc B
Cookies ne permettent pas un coup de pied jusqu'à après qu'ils sont ensemble et une nouvelle page de demande est envoyée. C'est parce que des cookies sont envoyés avec les demandes de page, ils n'ont tout simplement pas apparaître comme par magie à un serveur.
Votre solution est de faire un rafraichissement de la page après la création du cookie.
header
pour rediriger vers la même page ou d'utiliser du javascript?Vous utilisez
header()
puisque vous ne la redirection à partir du serveur.OriginalL'auteur John Conde
Selon le Manuel PHP à http://php.net/manual/en/function.setcookie.php:
En d'autres termes, la fonction
setcookie()
n'est pas de travail parce qu'il est à l'intérieur de la page. Si vous voulez que cela fonctionne, vous aurez besoin de mettre cette fonction avant de la page, plus précisément avant tout des en-têtes.Ce faire:
OriginalL'auteur JDot