9
votes

Comment accéder aux valeurs de cookie sur différents chemins du même domaine en utilisant php?

Un paramètre du chemin peut être ajouté à $ _Cookie []?


1 commentaires

Vous pourriez trouver $ cookie-> SetPath ($ PATH) utile, comme trouvé dans Cette bibliothèque autonome < / a>.


5 Réponses :



11
votes

Si vous essayez d'accéder aux cookies définis pour un chemin différent sur le même domaine que le courant, cela ne peut pas être fait. Le navigateur lui-même restreint cela et envoie uniquement les cookies appropriés pour le chemin actuel.


3 commentaires

Qu'en est-il de Facebook?, Facebook écrit des cookies pour le domaine "Facebook.com", mais il utilise ce cookies de "www.facebook.com"


@ user962284 Êtes-vous sûr? Je suis sûr que FB définit tous les cookies sur www.facebook.com, car il n'est même pas possible d'accéder à facebook.com (ils vous redirigent vers www.)


Ceci est une erreur. Un navigateur suivant les recommandations du RFC fait renvoie les deux valeurs dans le cas de plusieurs cookies avec le même nom mais différents chemins. C'est en fait PHP qui gêne; S'il vous plaît voir ma réponse postée.



2
votes

Non, de tels paramètres sont impossibles car le navigateur n'envoie pas le chemin du serveur. Il n'envoie que le nom et la valeur de chaque cookie (vous ne pouvez donc pas voir le chemin, s'il s'agit d'un cookie de session, quand il expirera et ainsi de suite).


0 commentaires

2
votes

Je ne pense pas qu'il soit possible d'obtenir le cookie d'un chemin différent, car cela pourrait éventuellement causer une question de sécurité.


0 commentaires

5
votes

Bien que le client HTTP (c.-à-d. Le navigateur) ne renvoie pas le chemin que le cookie a été réglé sur, PHP fait des hypothèses sur les cookies en ce qui concerne son $ _ cookie tableau.

si Vous définissez deux cookies avec le même nom, un avec la valeur «Première valeur» avec le chemin / et la seconde avec la valeur «deuxième valeur» avec le chemin / Test , un navigateur suivant le comportement recommandé - mais non requis - de la RFC vous renvoyera les deux valeurs. Lorsque vous accédez à une URL sous le chemin / test , le navigateur envoie ceci: xxx

le "problème" est que php ne lit que la première valeur. - $ _ cookie ["nom"] ne contiendra que la valeur "secondaire" sans indice que "la première valeur" existe. Si vous avez besoin d'accès aux deux valeurs, vous devez analyser la valeur de $ _ Server ['http_cookie'] vous-même - cela contiendra "Nom = secondaire, nom = première valeur" pour ce qui précède Exemple. Notez que la "deuxième valeur" est d'abord en ligne car elle a été définie avec un chemin plus long. Veuillez noter que la RFC ne garantit pas ce comportement, il ne dit que les clients HTTP devraient faire cela.


4 commentaires

Intéressant, est-ce spécifique aux sous-répertoires? Comme dans, une demande d'un sous-répertoire recevra les cookies de la racine, mais une demande à la racine ne recevra pas de cookies pour les sous-répertoires? Aussi je suis curieux de savoir si les navigateurs mettent en œuvre cela ou non :)


CORRECT, un sous-répertoire ou un chemin plus long recevra toujours un cookie avec un chemin plus court qui correspond. Tous les navigateurs sont mis en œuvre de cette façon. La seule chose qui n'est pas un comportement non garantie est si vous avez plusieurs cookies avec le même nom, mais différents chemins - vous Devrait recevoir les deux cookies dans un ordre fixe, mais le RFC ne fait aucune promesse.


C'est en fait la bonne réponse car elle donne une explication complète sur la raison pour laquelle cela se produit. Je noterais, et cela manque, bien que vous ne puissiez pas dire _ cookie [] un chemin, vous pouvez indiquer setcookie un chemin. Nous sommes confrontés à cela avec une API. Donc, vous pouvez réellement dire setcookie pour définir le chemin de racine, puis l'accéder à n'importe où, comme: Setcookie ("nom", "données", expire, "/") . Ce dernier paramètre est le chemin d'accès et le réglage sur / en fait un chemin racine. Cela résoudrait le problème de l'OP.


Construire sur ce que Nate avait mentionné sur les cookies disponibles via $ _Server ['http_cookie'] ... utilisez ceci pour placer les cookies individuels dans un tableau: $ cookies = parse_ini_string (str_repling (";", " ", $ _Server ['http_cookie']));