Árvíztűrő sütik

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:

Cookie encoding: ez lesz a böngészőben

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:

Cookie encoding - Response

Azután pedig a böngésző ezt küldi vissza a szervernek:

Cookie encoding - Request

Ö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).



Balássy György (MS RD, ASP.NET MVP, MCTS)

Balássy György (MS RD, ASP.NET MVP, MCTS) Villamosmérnök, a BME Automatizálási és Alkalmazott Informatikai Tanszékén webportálok fejlesztését oktatja. 2000 óta foglalkozik a Microsoft .NET platformjával, melynek meghonosításában jelentős szerepet vállalt előadóként, konzulensként és A .NET Framework és programozása című könyv társszerzőjeként. Az MSDN Kompetencia Központon belül a Portál Technológiák Csoport vezetője, szakterülete web alapú rendszerek fejlesztése és üzemeltetése. 2004-ben Magyarországon elsőként kapta meg a Most Valuable Professional címet, majd 2005 óta a Microsoft magyarországi regionális igazgatója. Publikációi a Technet Magazinban, az MSDN Kompetencia Központ honlapján és szakmai blogjában olvashatóak.

2008.03.19. 20:42:18 | Permalink | Hozzászólások: 0 | Tárgyszavak:


  • 24 perc

    Dávid Zoltán Huszonnégy perccel a határidő előtt mi történhet? Tovább »
  • Kattintható sorú GridView

    Dávid Zoltán Az ASP.NET GridView-t vagy szereti az ember, vagy nem, én mindenesetre használom. Egész jó listázáshoz, vagy master-detailhez. Utóbbihoz valahogy Select eseményt kell tudni kiváltani a GridView egy során. Normális esetben erre egy Button vagy LinkButton elég. Felmerült, hogy lehet megoldani egy adatsor kiválasztását úgy, hogy ahhoz bárhol lehessen kattintani a soron. Végül ezt találtam a legszebbnek. Tovább »


Írja meg Ön is véleményét!


Hozzászólásokat csak regisztrált, bejelentkezett felhasználóktól tudunk elfogadni!

Hozzászólások