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.