2010-07-06 10 views
6

J'ai un cookie que je l'utilise sur mon application. Il ressemble à ceci:cookie PHP écrit sur le domaine incorrect

+-------+-------+-----------------------+-------+----------+ 
| Name | Value | Domain    | Path | Expires | 
+-------+-------+-----------------------+-------+----------+ 
| foo | bar | my.domain.tld   |/ | Session | 
+-------+-------+-----------------------+-------+----------+ 

Dans une section de mon script, basé sur une condition, je suis en train de changer la valeur d'un cookie. J'utilise ce code:

// overwrite cookie 
if($condition){ 
    setcookie("foo", "cat", 0, "/", "my.domain.tld"); 
} 

Par la suite, mes données de cookie ressemble à ceci:

+-------+-------+-----------------------+-------+----------+ 
| Name | Value | Domain    | Path | Expires | 
+-------+-------+-----------------------+-------+----------+ 
| foo | bar | my.domain.tld   |/ | Session | 
| foo | cat | .my.domain.tld  |/ | Session | 
+-------+-------+-----------------------+-------+----------+ 

Comment se fait un . est préfixera le domaine? Je veux écraser le cookie existant.

+0

n'a pas de sens, il * doit * être réglé sur anything.domain.tld sinon il y a un gros bug quelque part - la seule chose que j'ose suggérer, est que vous vérifiez à nouveau et assurez-vous que le premier cookie n'est pas en fait mis à .anything plutôt que le second .. – nathan

+0

Nathan, il semble que ce n'est pas un bug tant que cela pourrait être une source commune de confusion. Voir la réponse ci-dessous :) –

+0

Vous trouverez peut-être [ '$ Cookie-> setDomain (domaine $)'] (https://github.com/delight-im/PHP-Cookie/blob/004cde69ec840e65c15275e09b92ecb1da06f357/src/Cookie.php# L117) utile, tel que trouvé dans [cette bibliothèque autonome] (https://github.com/delight-im/PHP-Cookie). Il prend soin de normaliser le nom de domaine que vous avez fourni. – caw

Répondre

0

Il se trouve, en spécifiant aucun domaine semble fonctionner:

setcookie("foo", "cat", 0, "/"); 

données cookie attendu:

+-------+-------+-----------------------+-------+----------+ 
| Name | Value | Domain    | Path | Expires | 
+-------+-------+-----------------------+-------+----------+ 
| foo | cat | my.domain.tld   |/ | Session | 
+-------+-------+-----------------------+-------+----------+ 

Etrange, mais ça marche.

0

De la documentation:

Le domaine que le cookie est disponible. Pour rendre le cookie disponible sur tous les sous-domaines de example.com, vous devez le définir sur ".example.com". Le . n'est pas obligatoire mais le rend compatible avec plus de navigateurs. Si vous le définissez sur www.example.com, le cookie sera uniquement disponible dans le sous-domaine www. Reportez-vous à la correspondance de queue dans »spec pour plus de détails.

Et la spécification correspondante de la queue est ici:

http://curl.haxx.se/rfc/cookie_spec.html

+0

J'aurais dû être plus précis. Par «n'importe quoi» je voulais dire que le sous-domaine pourrait être n'importe quoi. Je ne voulais pas réduire les réponses à un sous-domaine spécifique 'www'. Pour être plus précis, je ne veux pas que le cookie corresponde à * tous * les sous-domaines du domaine. J'ai mis à jour ma question. –