ASP.NET-ben nagyon egyszerűen tudunk sütiket, azaz cookie-kat kezelni, gyakorlatilag kulcs-érték párokról van szó. Egyetlen sorral elmenthetünk oda valamit:
this.Response.Cookies[ "akarmi" ].Value = this.txtOriginal.Text;
és egyetlen másik sorral vissza is olvashatjuk:
this.txtLoaded.Text = this.Request.Cookies[ "akarmi" ].Value;
Akkor van csak igazán gond, ha a felhasználó telepakolja a fenti txtOriginal nevű TextBoxot magyar ékezetes karakterekkel - legyen az a kedvenc árvíztűrő tükörfúrógép teszt szövegünk -, még a böngésző is eldobja magát, méghozzá ritka durván:
Persze ki hisz manapság egy modern böngészőnek, megnéztem, hogy Nikhil Web Development Helpere mit lát ebből.Íme a szerver által küldött válasz, amiben a süti lejön a kliensre:
Azután pedig a böngésző ezt küldi vissza a szervernek:
Örülhetünk, hogy a két sztring azonos, de sajnos ez nem segít a szerveren.
Két lehetséges megoldást találtam az ékezetek lecsapkodására, úgy látom működik mindkettő.
1. Base64 encoding használata
Ekkor így módosul a kód:
this.Response.Cookies[ "akarmi" ].Value = Convert.ToBase64String( Encoding.UTF8.GetBytes( this.txtOriginal.Text ) );
...
this.txtLoaded.Text = Encoding.UTF8.GetString( Convert.FromBase64String( this.Request.Cookies[ "akarmi" ].Value ) );
És ez megy át a madzagon, összesen 44 karakter:
w6FydsOtenTFsXLFkSB0w7xrw7ZyZsO6csOzZ8OpcA==
2. UrlEncoding használata
Ez webfejlesztőknek ismerősebb kód lehet:
this.Response.Cookies[ "akarmi" ].Value = this.Server.UrlEncode( this.txtOriginal.Text );
...
this.txtLoaded.Text = this.Server.UrlDecode( this.Request.Cookies[ "akarmi" ].Value );
De sokkal terjengősebb az eredmény, 67 karakter:
%c3%a1rv%c3%adzt%c5%b1r%c5%91+t%c3%bck%c3%b6rf%c3%bar%c3%b3g%c3%a9p
Ezt az ASP még megcsinálta automatikusan, az ASP.NET azonban nem, tehát erre külön oda kell figyelni különösen akkor, ha ASP és ASP.NET alkalmazások között cserélgetünk sütiket (lásd KB313282).