109 votes

Pourquoi document.cookie ne montre-t-il pas tous les cookies du site?

Je vais sur un forum qui utilise vBulletin 3.8. Quand je me connecte, j'utilise firebug pour voir quels cookies ont été définis. Je vois ces cookies:

__utmb, __utmc, __utma, __utmz, bbsessionhash, vbseo_loggedin, bbpassword, bbuserid, bblastactivity, bblastvisit

Ils avaient tous une valeur définie, et le domaine était identique.

Mais quand j'utilise JavaScript pour les voir, il ne voit que ces cookies:

__utmb, __utmc, __utma, __utmz, vbseo_loggedin, bblastactivity, bblastvisit

Dans firebug, je ne vois que ces trois cookies: bbsessionhash, bbpasword et bbuserid, qui ont en fait été définis. HTTPOnly dans la colonne HTTPOnly. Qu'est-ce que cela signifie et est-ce la raison pour laquelle je ne peux pas voir ces cookies en JavaScript en utilisant document.cookie?

171voto

drdaeman Points 3312

De http://en.wikipedia.org/wiki/HTTP_cookie:

Les cookies ne sont pas directement visibles pour les programmes côté client tels que JavaScript s'ils ont été envoyés avec le drapeau HttpOnly. Du point de vue du serveur, la seule différence par rapport au cas normal est que la ligne header set-cookie est ajoutée avec un nouveau champ contenant la chaîne `HttpOnly':

Set-Cookie: RMID=732423sdfs73242; expires=Ven, 31-Déc-2010 23:59:59 GMT; path=/; domain=.exemple.net; HttpOnly

Lorsque le navigateur reçoit un tel cookie, il est censé l'utiliser comme d'habitude lors des échanges HTTP suivants, mais sans le rendre visible aux scripts côté client. Le drapeau HttpOnly ne fait pas partie d'une norme et n'est pas implémenté dans tous les navigateurs.

Mise à jour de 2017: beaucoup de temps s'est écoulé depuis 2009, et le drapeau d'en-tête HttpOnly est devenu une norme, définie dans la section 5.2.6 de la RFC6265, avec la sémantique de stockage décrite dans le même document (cherchez "http-only-flag" dans le texte de la RFC).

Il n'y a aucun moyen d'accéder à quoi que ce soit concernant les cookies HttpOnly depuis les API "non-HTTP", par exemple JavaScript. Par conception, il n'est ni possible de lire ni d'écrire de tels 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