2012-01-23 2 views
-3

À ce moment-là, je semble avoir mal compris quelque chose à propos des cookies. Pourquoi pas ce travail ...Je ne peux pas mettre de cookies dans php

<?php 

if (isset($_COOKIE["stop"])){ 
    echo "Welcome " . $_COOKIE["stop"] . "!<br />"; 
} 


$passedvar = $_POST["stopsaway"]; 

if (isset($passedvar)){ 
echo "HHHYES!!!"; 
if (is_numeric($passedvar)){ 
echo "Yup its a number string alright! I'll turn it into a int and I'll make a cookie."; 
//$passedvar = (int)$passedvar; 
setcookie("stop", $passedvar, time()+30); 
echo "COOKIE MADE."; 
} 
} 

if (isset($_COOKIE["stop"])){ 
    echo "Welcome " . $_COOKIE["stop"] . "!<br />"; 
} 
//var_dump($_POST["stopsaway"]); 

?> 

CODE DEUXIÈME

<?php 

$thing = 1; 

if ($thing==1){ 
setcookie("stop","4",time()+30); 
} 

if (isset($_COOKIE["stop"])){ 
echo "So why won't it work THERE!?"; 
} 

print_r($_COOKIE); 
?> 

Fondamentalement, je veux l'utilisateur d'entrer un numéro dans un champ, puis un cookie à ce numéro et la page principale reflète ce changement. Cela a fonctionné une fois. Le code du bas semble fonctionner, mais pour une raison quelconque, il ne fonctionne pas à moins que je tape manuellement l'URL pour aller à la page principale en utilisant la fenêtre de la page cookie. Si j'ai les deux onglets ouverts l'un à côté de l'autre ... ça ne fait rien pour rafraîchir la page principale après avoir créé le cookie ... Je me demande pourquoi.

Aussi, je me souviens d'avoir entendu que rien ne peut venir avant setcookie, pour que ça fonctionne, ça doit être la toute première ligne de code ..... Alors comment dois-je vérifier l'entrée en premier, ou d'autres conditions? ? Merci! Ah oui, et j'utilise Firefox, mais j'ai aussi testé sur mon Android. Et ça marche sur une page mais pas sur une autre donc je ne pense pas que ce soit le navigateur.

+0

Je pense que le problème est que '+ 30' c'est un petit temps si je me souviens bien que 30 signifie 30 millisecondes ... le faire comme 3000 pendant 3 secondes –

+2

' Je me souviens d'entendre que rien ne peut venir avant setcookie, pour pour que ça marche, ça doit être la toute première ligne de code ... Alors, comment dois-je vérifier l'entrée en premier, ou d'autres conditions? 'Vous ne pouvez rien afficher avant, car cela déclenche l'en-tête envoyé. Vous pouvez toujours avoir tout le code PHP que vous aimez. –

+0

Donc, je pourrais garder les conditionnels tant qu'ils n'utilisent pas l'écho ou quelque chose? J'ai supprimé les échos, semble faire l'affaire. Merci!! Et Sean non, ça utilise des secondes. – user1159454

Répondre

0

$ _COOKIE ne sera pas défini avant la page suivante. Étant donné que votre cookie expire au bout de 30 secondes, il est probable qu'il soit parti la prochaine fois que vous accéderez à la page.

+0

Merci, les cookies prennent-ils en compte le temps de chargement ?? – user1159454

+0

Les cookies expirent exactement au moment spécifié - le temps de chargement n'a rien à voir avec cela. – whichdan

+0

Je vois. Eh bien, je vois que par défaut, les cookies semblent utiliser un décalage de time() pour déterminer leur expiration. Je me demande si vous pouvez le configurer pour utiliser une heure précise sur la page à laquelle il est redirigé ... comme une façon de dire 5 secondes après le chargement de la page. Aussi après quelques barbotage et il n'est pas 3h du matin, j'ai compris ce qui n'allait pas. La redirection d'en-tête va après le réglage des cookies, et le cookie arrivait après un écho. Je pense que je comprends maintenant que les cookies peuvent avoir autant de PHP avant, de tout type nécessaire, tant que le code n'a rien à voir avec l'écriture sur la page. – user1159454

Questions connexes