php setcookie ne fonctionne pas avec appel ajax
J'ai une page, test.php avec le code suivant:
<html>
<body>
<form>
<script type="text/javascript">
function SendCookies(){
if (window.XMLHttpRequest)/* code for IE7+, Firefox, Chrome, Opera, Safari */
{ xmlhttp=new XMLHttpRequest(); }
else /* code for IE6, IE5 */
{ xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); }
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status == 200)
{
alert('done');
}
}
xmlhttp.open("GET", "/web/DEV/Classes/SetCookie.php?time=" + new Date());
xmlhttp.send();
}
</script>
<input type="text" id="txtInput" name="txtInput"/>
<input type="button" id="btnSubmit" name="btnSubmit" value="Submit" onclick="SendCookies()"/>
<div id="divTest">
<?php
if (isset($_COOKIE["TestCookie"])) {
echo $_COOKIE["TestCookie"];
} else {
echo "__Results__";
}
?>
</div>
</form>
</body>
</html>
J'ai une page, SetCookie.php avec le code suivant:
<?php
$var = "THIS IS A TEST";
setcookie("TestCookie", $var, time()+60*60*24*30);
?>
Quand test.php s'bouton est cliqué, j'utilise XMLHttpRequest pour appeler mon SetCookie.php page. La page s'exécute, parce que si j'ajoute un écho, je reçois que dans le xmlhttp réponse. Cependant, TestCookie ne semble pas être en train de se définir.
Si dans text.php, je fais la même commande qui se trouve dans SetCookie.php le cookie est alors défini en conséquence, pour toutes les sessions de navigateur.
Même après que j'ai fermer /ouvrir le navigateur, le cookie reste inchangé à partir de quand je suis dans mon test.php page manuellement.
----EDIT-----
J'ai ajouté:
if(!setcookie("TestCookie", "A", time()+60*60*24*30, "/")) {
echo "FAIL";
}
pour le très haut de test.php cependant lorsque je recharge la page, il ne se montre jamais la mise à jour de cookie... parce que cookie a été déjà mis sans le"/" paramètre, et ne peuvent être modifiées plus tard, avec la ,"/" paramètre.
Après le vidage du cache et de travail de la proposition de code, j'ai effacé mes cookies du navigateur et utilisé le paramètre ajouté pour l'ensemble de la méthode, j'ai été capable de manipuler les cookies à partir de toutes les pages!!! merci beaucoup!!
Désolé, j'ai été stupide 😉 s'avère la seule chose que vous ne pouvez pas donc est de définir des cookies POUR la demande.
c'est toujours bon à savoir, je n'avais aucune idée qu'il n'y a aucune restriction. =P
OriginalL'auteur adam | 2011-04-12
Vous devez vous connecter pour publier un commentaire.
Si vous n'ajoutez pas un
$path
de la valeur àsetcookie()
, la valeur par défaut est "le répertoire courant". Cela signifie que si vous définissez le cookie de/web/DEV/Classes/SetCookie.php
, le cookie est défini pour/web/DEV/Classes/
, et de tout ce qui précède que le chemin ne verrez pas le cookie.Pour résoudre ce problème, ajoutez un spécifique $chemin d'accès à la fonction setcookie. Si votre application s'exécute sur la racine du domaine (example.com), l'utilisation
'/'
. Si c'est dans un sous-dossier (example.com/myapp/), l'utilisation'/myapp/'
OriginalL'auteur Joel L
Je pense que vous devriez regarder dans le chemin de paramètre de la fonction setcookie. "/" , De sorte qu'il est accessible de partout dans tous les répertoires/pages du site.
OriginalL'auteur Sabeen Malik