2010-01-10 7 views
10

Ok, j'ai un ensemble de cookies, et je peux le voir clairement si je vais à des données privées dans Firefox ... ok donc quand je fais écho sur une page dans un certain répertoire cela fonctionne, (www.example.com/dir), mais sur la page d'index du site (www.example.com), il ne répétera pas, il dit que le cookie n'est pas défini. Oui, j'ai les cookies activés, oui j'ai essayé de vider le cache et tout ça. Des idées? PHP btwLes cookies ne fonctionnent pas sur des pages différentes

+0

Vous trouverez peut-être [ '$ Cookie-> setPath ($ path)'] (https://github.com/delight-im/ PHP-Cookie/blob/004cde69ec840e65c15275e09b92ecb1da06f357/src/Cookie.php # L104) utile, tel que trouvé dans [cette bibliothèque autonome] (https://github.com/delight-im/PHP-Cookie). – caw

Répondre

17

Dans quel répertoire utilisez-vous le cookie?

De l'PHP manual on setcookie(), Souligné par l'auteur:

Chemin

Le chemin sur le serveur dans lequel le cookie sera disponible. S'il est défini sur '/', le cookie sera disponible dans tout le domaine. S'il est défini sur '/ foo /', le cookie ne sera disponible que dans le répertoire/foo/et tous les sous-répertoires tels que/foo/bar/de domaine. La valeur par défaut est le répertoire courant que le cookie est situé dans.

2

Vous devez vérifier le chemin d'accès au cookie. Si ce n'est pas '/', voici votre réponse!

15

cookies peuvent être liés à un domaine spécifique, sous-domaine, le chemin, et le protocole (http/https). Vous devez spécifier le chemin lors de la configuration du cookie en PHP:

setcookie("TestCookie", "Value", time()+3600 , '/'); 

Le quatrième paramètre se lie à la racine du site et il sera disponible dans tous les sous-répertoire du site principal.

Si vous le souhaitez sur le domaine principal et tous les sous-domaine, fournissent le cinquième paramètre comme celui-ci:

setcookie("TestCookie", "Value", time()+3600 , '/', '.example.com'); 

Maintenant, il sera lisible à:

www.example.com
example.com/newdir
awesome.example.com/newdir

+0

Ajout du '/', '.example.com' à la fin résolu ce problème pour moi – Nate

0

Vous devez définir le chemin $ vers/dans setcookie(), si vous voulez y accéder dans tous les répertoires

1

Définissez votre option de chemin; la valeur par défaut est le répertoire en cours dans lequel le cookie est défini. Parce que vous définissez le cookie dans le répertoire/dir, c'est uniquement disponible dans ce répertoire ou en dessous.

Vous contournez cela en définissant explicitement le chemin, à savoir.

setcookie(name,value,expire,path,domain,secure) 

Définissez le chemin sur "/".

+0

Je tape WAY trop lent. – Erik

3

Oui essayez ceci, j'étais aussi confronté à ce problème mais résolu par le code ci-dessous.

setcookie("TestCookie", "Value", time()+3600 , '/'); 
0

cookies doivent être réglées avant la page de sortie !!! Étant donné que les cookies sont envoyés par le script au navigateur dans les en-têtes HTTP, avant d'envoyer votre page, ils doivent être définis avant même d'envoyer une seule ligne de HTML ou toute autre sortie de page. Au moment où vous envoyez une sorte de sortie, vous signalez la fin des en-têtes HTTP. Lorsque cela se produit, vous ne pouvez plus définir de cookie. Si vous essayez, la fonction setcookie() retournera FALSE, et le cookie ne sera pas envoyé.

+0

Lisez ceci: http://www.thesitewizard.com/php/set-cookies.shtml –

0
setcookie('cookie_username', $cookie_username, time() + (86400 * 30), "/"); // 86400 = 1 day, '/' denotes cookie available in entire directory. 

et dans une autre page:

$username = $_COOKIE['cookie_username']; 

également vous assurer que le navigateur ne bloque pas les cookies.

Si vous voulez utiliser des cookies dans le domaine sous aussi:

setcookie('cookie_username', $cookie_username, time() + (86400 * 30), "/", ".subdomain.com"); // 86400 = 1 day, '/' denotes cookie available in entire directory. 
Questions connexes