web-dev-qa-db-fra.com

Définir le cookie avec JS, lire avec PHP problème

J'essaie de définir un cookie avec javascript et de le lire dans une autre page avec php . Je suis capable d'écrire le cookie en le faisant

document.cookie = cookieName+"="+cookieValue;

et je travaille partiellement. - Le cookie est écrit et je peux le lire avec $_COOKIE[cookieName] mais UNIQUEMENT dans la même page Web.

Ce qui n'est pas vraiment utile. Je dois le lire dans une autre page. Je développe habituellement en asp.net et c #, je suis donc un nouvel utilisateur de php. Est-ce que je fais quelque chose de mal?

Merci pour votre temps!

EDIT1: Les deux pages sont dans le même domaine .. par exemple. site.com/index.php -> site.com/index2.php

EDIT2: Le cookie est défini sur une page:

function SetCookie(cookieName,cookieValue,nDays) {
 var today = new Date();
 var expire = new Date();
 if (nDays==null || nDays==0) nDays=1;
 expire.setTime(today.getTime() + 3600000*24*nDays);
 document.cookie = cookieName+"="+escape(cookieValue)
                 + ";expires="+expire.toGMTString();
}

et dans une autre page, il ne peut pas être consulté, mais dans cette même page, il peut ...

EDIT3: J'ai essayé de définir le domaine et ajouté path=<?php echo $_SERVER['HTTP_Host']; ?> au code javascript ... toujours rien .. 

EDIT4: Jusqu'ici j'ai ..

document.cookie = cookieName+"="+escape(cookieValue)+"; expires="+expire.toGMTString()+"; path=/"+"; domain=.<?php echo $_SERVER['HTTP_Host']; ?>";

et encore je peux lire le cookie SEULEMENT à partir de la même page ..

EDIT5: Oh ... mon dieu ... c'était une faute de frappe tout le temps ... il suffisait de supprimer le "chemin = /" + "; dom ..." j'ai tellement honte En attendant, j’ai également réinitialisé mes cookies, alors Jared ne peut malheureusement pas accepter votre message en tant que réponse ... j’ai fait honte à mon nom !!! .. ..

25
Andrej

Lisez la suite sur la configuration des cookies Javascript et en particulier sur les chemins d'accès et les domaines d'accès ici

http://www.quirksmode.org/js/cookies.html

Je pense que ce qui se passe est l'une des deux choses suivantes: 

  1. Vous n'accédez pas au cookie du même domaine/sous-domaine et/ou 
  2. l'autre page ne fait pas partie du chemin que le cookie a spécifié.

Donc, votre cookie ne donne pas les informations pertinentes au navigateur pour qu'il soit accessible à travers les sous-domaines et/ou le chemin du répertoire.

document.cookie = 'ppkcookie1=testcookie; expires=Thu, 2 Aug 2001 20:47:11 UTC; path=/; ;domain=.example.com'

Remarque, .example.com est simplement un exemple de domaine (vous avez besoin du vôtre) et vous n'avez pas besoin d'un caractère générique autre que le . initial pour qu'il soit accessible à tous les sous-domaines. Et vous devez générer une date expires=. De QuirksMode:

function createCookie(name,value,days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    } else {
        var expires = "";
    }
    document.cookie = name+"="+value+expires+"; path=/; domain=.example.com";
}

J'ai ajouté le bit domain= à la fonction de QuirksMode.

EDIT (L'exemple ci-dessous a initialement référencé des pages sur mon site Web personnel.)

Andrej, cela fonctionne parfaitement pour moi:

http://example.com/test.php

function createCookie(name,value,days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    document.cookie = name+"="+value+expires+"; path=/; domain=.example.com";
}

createCookie('cookieee','stuff','22');

http://example.com/test/test.php

<pre>
<?php 

print_r($_COOKIE);

?>

Et l'impression de $_COOKIE montrera le cookie. Remarque Lorsque j'inspecte le cookie, le fichier .example.com est défini correctement en tant que domaine.

28
Jared Farrish

Les cookies ne sont accessibles que par le code qui est exécuté sur le même domaine. 

Si votre code PHP et votre code .NET s'exécutent sur des domaines différents, le navigateur n'enverra pas les cookies du domaine A avec une requête adressée au domaine B (ou l'inverse) - cette application de la règle Même origine. aide à garder le Web rapide (puisque le navigateur n'a pas à transmettre tous des cookies d'un utilisateur pour chaque requête et que le serveur n'a pas à analyser des mégaoctets de données inutiles pour obtenir les deux champs qu'il contient. intéressé à) et sécurisé (puisque je peux détourner votre compte si j’ai un cookie de votre part avec une clé de session sécurisée.)

@Jared a posté un bon lien depuis QuirksMode qui donne un excellent aperçu du paramétrage du chemin et du domaine afin que vous disposiez exactement de l'accès que vous souhaitez sur votre site.

5
Sean Vieira

Pouvez-vous donner plus d'informations? Sont-ils tous deux sur le même domaine juste des fichiers différents? Est la ligne

document.cookie = cookieName+"="+cookieValue;

la seule ligne que vous utilisez pour créer le cookie?

2
John Nickerson

Si vous souhaitez développer le domaine disponible pour le cookie, vous devez le spécifier dans le cadre du cookie:

document.cookie = cookieName + '=' + cookieValue + '; path=/;';
2
zzzzBov

Vous devez définir le chemin d'accès au cookie.

Par exemple, en javascript si vous ne spécifiez pas le chemin du cookie, il est défini avec le chemin de la page actuelle.

En JS:

Pour installer le cookie:

document.cookie = "key=value; expires=Fri, 03 Aug 2018 12:00:00 UTC; path=/";

En php:

Pour installer le cookie:

setcookie('key', 'value', (time() + (3600*2)), '/');

Pour accéder à:

if (isset($_COOKIE['key'])) echo $_COOKIE['key'];
0
Tanvir Ahmed