252 votes

Cookies sur localhost avec domaine explicite

Je dois rater quelque chose de fondamental à propos des cookies. Sur l'hôte local, lorsque je place un cookie du côté serveur et spécifier explicitement le domaine comme localhost (ou .localhost). le cookie ne semble pas être accepté par certains navigateurs.

Firefox 3.5 : J'ai vérifié la requête HTTP dans Firebug. Ce que je vois est :

Set-Cookie:
    name=value;
    domain=localhost;
    expires=Thu, 16-Jul-2009 21:25:05 GMT;
    path=/

ou (lorsque je règle le domaine sur .localhost) :

Set-Cookie:
    name=value;
    domain=.localhost;
    expires=Thu, 16-Jul-2009 21:25:05 GMT;
    path=/

Dans les deux cas, le cookie n'est pas stocké.

IE8 : Je n'ai pas utilisé d'outil supplémentaire, mais le cookie ne semble pas être stocké aussi bien, car il n'est pas renvoyé dans les requêtes ultérieures.

Opera 9.64 : Localhost et .localhost travail Mais lorsque je vérifie la liste des cookies dans les préférences, le domaine est défini sur localhost.local alors qu'il est répertorié sous localhost (dans le regroupement des listes).

Safari 4 : Localhost et .localhost travail mais ils sont toujours répertoriés comme .localhost dans les préférences. D'autre part, un cookie sans domaine explicite, il est affiché comme juste localhost (sans point).

Quel est le problème avec localhost ? Vu le nombre d'incohérences, il doit y avoir des règles spéciales concernant localhost. En outre, je ne comprends pas très bien pourquoi les domaines doivent être préfixés par un point ? La RFC 2109 le stipule explicitement :

La valeur de l'attribut Domain ne contient pas de points incorporés ou ne commence pas par un point.

Pourquoi ? Le document indique que cela a un rapport avec la sécurité. Je dois admettre que je n'ai pas lu toute la spécification (je le ferai peut-être plus tard), mais cela semble un peu étrange. Sur cette base, il serait impossible d'installer des cookies sur localhost.

36 votes

Un fil de discussion vieux de 6 ans et c'est toujours un problème. J'utilise Chrome v40. Voir aquí .

7 votes

Chrome 43... toujours un bug.

7 votes

Chrome 54 ici, NON résolu

4voto

toby Points 496

J'ai eu beaucoup plus de chance en testant localement en utilisant 127.0.0.1 comme domaine. Je ne sais pas pourquoi, mais j'ai eu des résultats mitigés avec localhost et .localhost, etc.

4voto

Les résultats que j'ai obtenus varient selon le navigateur.

Chrome- 127.0.0.1 fonctionne mais .localhost et "" ne fonctionnent pas. Firefox - .localhost fonctionne mais pas localhost, 127.0.0.1 et "".

N'a pas été testé dans Opera, IE ou Safari.

3 votes

Je viens de le tester avec Chrome V.22.0.1229.94 m : Setting a cookie for localhost without giving a Domain= Le paramètre fonctionne. Domain= fonctionne également, mais Domain=localhost ne le fait pas.

0 votes

Domain=localhost a fonctionné à la fois pour Chrome et Firefox ici, n'oubliez pas de définir le drapeau withCredentials: true dans axios, ou l'équivalent de votre client http js.

4voto

James Jacobson Points 31

J'ai passé beaucoup de temps à résoudre ce problème moi-même.

J'utilise PHP, et rien sur cette page n'a fonctionné pour moi. J'ai fini par me rendre compte que le paramètre "secure" de la commande La fonction PHP session_set_cookie_params() était toujours mis à VRAI.

Comme je ne visitais pas localhost avec https, mon navigateur n'acceptait jamais le cookie. J'ai donc modifié cette partie de mon code pour définir le paramètre 'secure' de manière conditionnelle, en fonction du fait que $_SERVER['HTTP_HOST'] soit 'localhost' ou non. Cela fonctionne bien maintenant.

J'espère que cela aidera quelqu'un.

3voto

qoomon Points 720

Vous pouvez utiliser localhost.org ou plutôt .localhost.org il se résoudra toujours à 127.0.0.1

6 votes

Je vous déconseille de le faire pour des raisons de sécurité, car localhost.org est un domaine réel pointant vers 127.0.0.1 . Nous ne savons pas grand-chose du propriétaire, et il ne pourrait détourner le trafic qu'en changeant l'adresse de pointage par une IP malveillante.

0 votes

C'est sûr que c'est l'inconvénient

1 votes

Ou vous pouvez configurer votre propre domaine pour qu'il pointe vers 127.0.0.1

3voto

이준형 Points 463

La seule chose qui a fonctionné pour moi a été de mettre Path=/ sur le cookie.

De plus, la valeur par défaut d'un attribut de chemin semble être différente d'un navigateur à l'autre, bien que je n'en aie testé que deux (Firefox et Chrome).

Chrome essaie de définir un cookie tel quel ; si path est omis dans Set-Cookie alors il ne sera pas stocké et sera ignoré.

Cependant, Firefox stocke un cookie même sans une demande explicite de l'utilisateur. path attribut. Il le définit simplement avec le chemin d'accès demandé ; l'url de ma demande était /api/v1/users et le chemin a été fixé à /api/v1 automatiquement.

Quoi qu'il en soit, les deux navigateurs ont fonctionné lorsque path a été fixé à / même sans domaine explicite, c'est-à-dire Domain=localhost ou quelque chose comme ça. Il y a donc des différences dans la façon dont chaque navigateur gère les cookies.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X