Selon la norme RFC 2109, la valeur d'un cookie "est opaque pour l'agent utilisateur et peut être tout ce que le serveur d'origine choisit d'envoyer, éventuellement dans un codage ASCII imprimable sélectionné par le serveur." En conséquence, différents langages/plates-formes/serveurs envoient une valeur de cookie différente même si la valeur d'origine est la même.Gestion des valeurs de cookie encodées en C#
Par exemple, C#/ASP.NET envoie le texte tel quel; ASP urlencodes classiques et urldecodes le texte; Perl/Apache urlencodes/décode le texte (mais différemment de ASP!). Php vous donne l'option.
Je suis en train d'écrire un système de Single Sign-On qui a besoin de partager un cookie avec des applications très différentes. En particulier, j'ai .NET, Java, Perl, ColdFusion qui doivent être pris en charge dès le départ.
Le texte que je stocke dans le cookie est toujours une chaîne ASCII-7 valide. Néanmoins, Perl aime coder des caractères ASCII 7 bits, par exemple.
Je vois deux principales alternatives pour faire ce travail:
acceptent Seules les valeurs non codées. Après tout, il n'y a pas besoin de les encoder. C'est comme ça en ce moment. Évidemment, tous les systèmes intégrés doivent pouvoir supporter des valeurs non codées.
Accepte les valeurs codées et non codées. Cela permettrait une compatibilité maximale hors de la boîte, mais je devrais déterminer si une valeur particulière est codée ou non (ce qui semble tout à fait impossible: est "% 20" la chaîne littérale "% 20" ou un espace?)
Quelle solution suggéreriez-vous et pourquoi? Si c'est # 2, comment détecteriez-vous le texte UrlEncoded?
Exemple d'un cookie (je l'ai ajouté la ligne casse pour l'adapter)
A5A2794D694241AD92F9B22F288EFAA1|8428DCCC|20090821142732|20090821142832|
10.100.107.40|955098D50AB4982D4E247EFA53F4E23B32A05ED0131E096709BE1D8CCC
8A3CA18252D376473C244FD71C462AB42CF54C
J'utilise déjà HEX. Le seul caractère non alphanumérique est un caractère de pipe pour séparer les champs - c'est ce qui est codé par Perl. D'un autre côté, n'importe quel personnage pourrait être encodé pour tout ce que je connais sous d'autres plateformes. Vous ne savez jamais :) – Sklivvz
Je pense que si vous vous en tenez à alphanumérique, ça ira. Utilisez simplement X comme délimiteur au lieu de | –