2010-07-13 6 views
2

je suis tombé sur l'extrait ci-dessous:Question sur les cookies PHP

setcookie('foo', 'v1', time() + 60*60*24, '/'); 
setcookie('foo', 'v2'); 
  • Quel est l'effet de la mise en 2 les cookies avec le même nom, mais différentes valeurs?
  • Est-il courant en pratique?
  • Où est-il utilisé?
+1

Etrange en effet (au moins pour moi). Je pouvais seulement supposer que l'auteur original voulait créer un tableau: 'setcookie ('foo []', 'v1'); setcookie ('foo []', 'v2'); 'et a oublié les parenthèses. –

+0

@Fixix: Je vois ... mais que fera le code ci-dessus "tel quel". Cela va-t-il mettre 2 cookies ou va-t-il l'écraser? – Zacky112

+0

@Felix Kling: Il n'y a pas de tableaux dans les cookies. Une équerre est juste un autre caractère. –

Répondre

1

Le v1 vs v2 partie fait ressembler à une astuce pour détecter un bug de gestion des cookies dans le navigateur: si foo égal v1, le navigateur n'a pas traité la modification de la valeur.

Il serait intéressant de connaître le contexte du code.

Modifier

aura-t-il mis 2 biscuits ou sera il remplacer

Cela dépend de l'endroit où vous appelez le script. Un appel setcookie() sans chemin définit un cookie pour le chemin courant (où path est un chemin d'URL, pas le chemin interne du système de fichiers). Donc, un appel de http://example.com/ créerait un seul cookie et un appel de http://example.com/somewhere/inside/ créerait deux cookies distincts, un pour / et un pour /somewhere/inside/.

+0

+1 il semble vraiment que le cookie 'foo' devrait avoir la valeur' v1' sur tous pages et 'v2' seulement sur la page actuelle. –

3

L'exemple ci-dessus remplacera simplement le premier cookie par le second. Si vous souhaitez mettre à jour un cookie pour stocker une nouvelle valeur, vous pouvez remplacer sa valeur.

Deux cookies peuvent avoir le même nom s'ils ont été définis pour des domaines ou des chemins différents. Exemple:

<?php 
setcookie("testcookie", "value1forhost", time(), "/", ".domain.com", 0, true); 
setcookie("testcookie", "value2forsubdom", time(), "/", "subdom.domain.com", 0, true); 
?> 
1

Je pense que cela n'est pas prévu. Le deuxième appel cookie remplacera le cookie de l'ensemble d'origine. Après le premier appel, il est impossible de savoir si le support du navigateur est disponible, car aucune entrée du navigateur n'est reçue lors du traitement d'un script. Un cookie est envoyé en tant qu'en-tête HTTP et renvoyé par le navigateur sur des requêtes consécutives.