Comment accéder à la valeur du cookie sur des chemins différents du même domaine à l'aide de PHP?
Peut un paramètre de chemin d'être ajouté à $_COOKIE[]?
Vous pouvez trouver
$cookie->setPath($path)
utile, que l'on trouve dans cette bibliothèque autonome.
OriginalL'auteur Steven | 2009-12-28
Vous devez vous connecter pour publier un commentaire.
Dans le cas où vous essayez d'accéder à des cookies pour un chemin différent sur le même domaine que le courant, qui ne peut pas être fait. Le navigateur lui-même cette limite, et envoie uniquement les cookies approprié pour le chemin d'accès actuel.
êtes-vous sûr? Je suis sûr que FB jeux de tous les cookies sur http://www.facebook.com comme il n'est même pas possible d'accéder à facebook.com (ils vous rediriger vers le site www.)
Ceci est incorrect. Un navigateur en suivant les recommandations de la RFC t envoyer les deux valeurs de retour dans le cas de plus d'un cookie avec le même nom mais des chemins différents. En fait, c'est PHP qui se trouve sur le chemin; s'il vous plaît voir mon posté réponse.
OriginalL'auteur Jani Hartikainen
Alors que le client HTTP (ex: navigateur) ne renvoient pas le chemin que le cookie a été mis à, PHP réellement fait des hypothèses sur les cookies en ce qui concerne son $_COOKIE tableau.
Si vous définissez deux biscuits avec le même nom, avec la valeur "première valeur" avec chemin d'accès / et le second avec la valeur de la "seconde valeur" avec chemin d'accès /test, un navigateur en suivant le recommandé mais pas obligatoire - le comportement de la RFC de retourner deux valeurs. Lorsque vous accéder à une URL sous la /test chemin, le navigateur envoie ceci:
Le "problème" est que PHP ne lit que la première valeur $_COOKIE['nom'] ne contient que la valeur de la "seconde valeur" n'y a aucune indication que le "premier de la valeur" existe. Si vous avez besoin d'accéder à ces deux valeurs, vous devez analyser la valeur de $_SERVER['HTTP_COOKIE'] vous-même - ce qui va les contenir "name=deuxième valeur, nom=valeur" pour l'exemple ci-dessus. Notez que la deuxième valeur" est en première ligne parce qu'elle a été définie avec un chemin plus long. Veuillez noter que le RFC ne garantit pas ce comportement, il est dit que les clients HTTP DEVRAIT ce faire.
Correct, un sous-répertoire ou un chemin plus long, vous recevrez toujours un cookie avec un chemin plus court qui correspond. Tous les navigateurs sont mises en œuvre de cette façon. La seule chose qui n'est pas garanti comportement est si vous avez plusieurs cookies avec le même nom mais des chemins différents - vous doit recevoir les cookies de retour dans un ordre fixe, mais le RFC ne pas faire de promesses.
C'est en fait la bonne réponse, car il donne une explication complète de ce qui se passe. Je tiens à souligner, et c'est manquante, si vous ne pouvez pas dire
$_COOKIE[]
un chemin d'accès, vous pouvez diresetcookie
un chemin. Nous sommes confrontés à une API. De sorte que vous pouvez réellement diresetcookie
pour définir le chemin d'accès racine puis y accéder de n'importe où, comme suit:setcookie('name', 'data', expire, '/')
. Ce dernier paramètre est le chemin et la valeur/
fait du chemin de la racine. Cela permettrait de résoudre le cas des OP problème.Construire sur ce que Nate avait mentionné à propos de l'enregistrement de cookies disponibles via la variable $_SERVER['HTTP_COOKIE']... l'utiliser pour placer les cookies individuels dans un tableau:
$cookies = parse_ini_string( str_replace( ";" , "\n" , $_SERVER['HTTP_COOKIE'] ) ) ;
OriginalL'auteur
oui, c'est le 4ème argument, mais vous ne pourrez accéder au cookie si elle a été fixée à l'aide d'un chemin d'accès que le répertoire en cours réside dans.
c'est déroutant... ici c'est à partir de php:
http://php.net/manual/en/function.setcookie.php
Vous avez accès comme n'importe quel autre cookie. Il sera disponible dans $_COOKIE si le script a accès.
Comment les différencier?
php ne pas le faire pour vous. vous auriez à mettre en œuvre vous-même.
OriginalL'auteur Galen
Pas de tels paramètres sont impossible, parce que le navigateur n'envoie pas le chemin d'accès au serveur. Il ne fait qu'envoyer le nom et la valeur de chaque cookie (donc vous ne pouvez pas voir le chemin, si c'est un cookie de session, lorsqu'il arrive à expiration, et ainsi de suite).
OriginalL'auteur Emil Vikström
Je ne pense pas qu'il sera possible d'obtenir le cookie à partir d'un chemin d'accès différent, car il pourrait causer un problème de sécurité.
OriginalL'auteur Krishna Shasankar