352 votes

Caractères autorisés dans les cookies

celui-ci est un quickie :

Quels sont les caractères autorisés dans le nom du cookie et de valeur ? Ils sont même sous forme d’URL ou un sous-ensemble commun ?

Je demande parce que j’ai rencontré récemment un comportement étrange avec les cookies qui ont `` en leur nom et je me demande si c’est quelque chose de navigateur spécifique ou si mon code est défectueux.

445voto

bobince Points 270740

Selon les anciens de Netscape cookie_spec:

Cette chaîne est une séquence de caractères à l'exception des semi-virgule, la virgule et l'espace blanc.

Par l'implication de l' = de caractère est également interdits dans le nom de la partie. Donc, - devrait fonctionner, et il ne semble pas être OK dans les navigateurs que j'ai obtenu ici; où êtes-vous eu de la difficulté avec elle?

Ce document, qui ne se souvient pas de dire, parce que Netscape étaient terribles à la rédaction de spécifications, était que les caractères de contrôle (\x00 de \x1F plus \x7F) ne sont pas autorisées, et de soutien pour les caractères non-ASCII est pas spécifiée.

Quels sont les navigateurs n':

  • dans l'Opéra et Google Chrome, les caractères non-ASCII sont codés dans des cookies avec de l'UTF-8;
  • dans IE, la machine de la page de code par défaut est utilisé (les paramètres régionaux et de ne jamais UTF-8);
  • Firefox (et les autres navigateurs basés sur Mozilla) utiliser l'octet de poids faible de chaque code UTF-16 le point sur son propre (ISO-8859-1 est OK, mais tout le reste est mutilé);
  • Safari refuse tout simplement d'envoyer tout cookie contenant des caractères non-ASCII.

donc, dans la pratique, vous ne pouvez pas utiliser des caractères non-ASCII dans tous les cookies. Si vous souhaitez utiliser l'Unicode, les codes de contrôle ou d'autres arbitraire séquences d'octets, vous devez utiliser un ad-hoc schéma de codage de votre choix. Le plus populaire est l'UTF-8-dans-l'URL de codage (comme produite par du JavaScript encodeURIComponent).

Il est un autre, internet standard pour les Cookies: RFC2965. Dans la présente norme, beaucoup plus de caractères spéciaux sont interdits, car il utilise la RFC2616 jetons ( - est encore permis), et seule la valeur peut être spécifiée dans une chaîne entre guillemets avec les autres personnages.

Cependant, vous devriez ignorer cette spécification, car aucun navigateur n'implémente quoi que ce soit. Dans le monde réel, nous sommes toujours à l'aide de l'original-et-pire Netscape cookie_spec.

29voto

stephen Points 852

Dans ASP.Net, vous pouvez utiliser `` pour encoder la valeur du cookie avant d’écrire dans le cookie et reconvertir en sa forme originale dans la lecture il.

Cela s’arrête et commerciaux et équivaut à signes fendre une valeur dans un tas de paires nom/valeur, comme il est écrit dans un cookie.

18voto

Jamie Rumbelow Points 2815

Je pense que c’est généralement le navigateur spécifique. Pour être du bon côté, base64 encoder un objet JSON et stocker tout dans celui. De cette façon, vous avez juste à le décoder et analyser le JSON. Ensemble des caractères utilisés en base64 devraient jouer très bien avec la plupart, si pas tous les navigateurs.

13voto

gavenkoa Points 6974

Nouveaux rfc6265 publié en avril 2011 :

Si vous regardez à la réponse de @bobince , vous voyez cette nouvelle restriction plus stricte.

3voto

Tinku Points 641

Il existe 2 versions de cookies spécifications
1. Version 0 cookies aka Netscape cookies,
2. Version 1 aka RFC 2965 cookies
Dans la version 0 le nom et La valeur de la partie de cookies sont des séquences de caractères, à l'exclusion du point-virgule, virgule, signe égal, et les espaces, si ce n'est pas avec des guillemets doubles
la version 1 est beaucoup plus compliqué, vous pouvez le vérifier ici
Dans cette version les spécifications pour nom la valeur de la partie est presque la même, sauf le nom ne peut pas commencer avec le signe $

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