C# - Cookie funkciója, használata

ASP.NET 3. rész

forráskód letöltése
Napjaink Webes alkalmazásai számtalan információt gyűjtenek az alkalmazás oldalaira látogatóról. Eltárolják az utolsó látogatás időpontját, rögzíthetik a gyakran látogatott szekciókat, a megadott felhasználónevet, és még sok egyéb mást. Ezeket az információkat legegyszerűbben úgy raktározhatják el, hogy egy vagy több cookie-t elküldenek a felhasználói számítógépre, így a legközelebbi látogatáskor már a felhasználóra jellemző beállítások fogadhatják, vagyis az oldal testre szabható. A cookie-k készítésének és használatának módját mutatjuk most be cikkünkben.
Mellékelt példa megnyitása előtt szükséges egy ASPNET03 nevű virtuális könyvtár létrehozása, mely a példa könyvtárára mutat. Ehhez futtassa le a mellékelt CreateVD.js parancsállományt.
A cookie egy olyan speciális állomány, mely a kliens gépén tárolódik. Ebben tetszőleges adatokat helyezhetünk el, és amikor ismét ugyanarra a weblapra látogat a felhasználó, akkor alkalmazásunk megkapja az itt tárolt adatokat automatikusan. Így eltárolhatunk például felhasználói nevet és jelszót, vagy azt az információt, hogy mikor járt utoljára nálunk a felhasználó, így ezeket a következő látogatáskor megtudhatjuk. Ennek a módszernek persze van egy nagy hátránya: az információ a számítógéphez és nem a tényleges személyhez kötött. Ha a felhasználónk egy másik számítógépről látogatja meg web helyünket, akkor nem kapjuk meg a már tárolt cookie-t és ugyanez a helyzet, ha mondjuk újratelepítette az operációs rendszerét a saját gépén, és ezzel a már összes tárolt cookie elveszett. Ennek ellenére sok esetben nagyon hasznos és jól használható technika.
A cookie fizikailag a C:\Documents and Settings\aktuális felhasználó\Cookies, illetve a C:\Windows\Cookies könyvtárban kap helyet operációs rendszer típusától függően. Ennek pontos helye lekérdezhető a rendszertől, ha esetleg szükségünk lenne rá. Ebben a könyvtárban számos TXT típusú állományt fogunk találni attól függően, hogy már hány olyan Web helyet látogattunk meg, amely elhelyezett a gépünkön cookie állományt.
Amikor tehát a kliens a böngészőjébe a mi URL címünket adja meg, akkor a gépe ellenőrzi, hogy ehhez a Web helyhez van-e már cookie állomány tárolva, ha igen, akkor annak tartalmát is a kérés mellé csatolja. Így amikor a webes alkalmazásunk megkapja a kliens kérését, melyet a Request property-n keresztül kiolvashatunk, akkor ott már szerepelni fog a cookie állományok tartalma, így ezt rögtön feldolgozhatjuk.
A HttpRequest objektum Cookies property-jén keresztül elérhető osztály neve HttpCookie, melynek jellemző property-jei a következők:
Expires
Osztály: HttpCookie
public DateTime Expires {get; set;}
A property-ben adható meg a cookie lejáratának dátuma.
HasKeys
Osztály: HttpCookie
public bool HasKeys {get;}
Lekérdezhető, hogy a cookie-nak vannak-e alkulcsai.
Name
Osztály: HttpCookie
public string Name {get; set;}
Visszaadja a cookie nevét.
Path
Osztály: HttpCookie
public string Path {get; set;}
Lekérdezhetjük, vagy megadhatjuk a cookie elérési útvonalát. Ezt akkor használhatjuk, ha az alkalmazás egy oldalához szeretnénk rendelni a cookie-t.
Secure
Osztály: HttpCookie
public bool Secure {get; set;}
Jelezhető, hogy a cookie biztonságos átvitel keretein belül mozogjon a szerver és a kliens között.
Value
Osztály: HttpCookie
public string Value {get; set;}
Az adott cookie értéke adható meg, vagy tudható meg innen.
A mellékelt alkalmazás három weblapot tartalmaz, melyben az első kapja a kérést, és ellenőrzi, hogy a két cookie jelen van-e a kérésben. A cookie-k neve BackColor, és LastVisit. Az első a WebForm12.aspx lap háttérszínét, míg a másik a felhasználó utolsó látogatásának időpontját tárolja. Amennyiben a cookie-k még nem léteznek a kliensnél, akkor a kérést a Webform3.aspx lapra irányítjuk, ahol lehetőség van egy színt kiválasztani. Itt adjuk ki a cookie-kat.
if (Request.Cookies["BackColor"] != null && Request.Cookies["LastVisit"] != null)
{
  Response.Redirect("WebForm2.aspx");         
}
else
{
  Response.Redirect("WebForm3.aspx");
}
Amennyiben a cookie-k léteznek, akkor a felhasználó egyből a WebForm2.aspx lapra juthat.
A WebForm3.aspx lapon ellenőrizzük a cookie-kat. Amennyiben az adott cookie létezik, akkor töröljük a Cookies kollekcióból, és létrehozunk egy újat.
if (Request.Cookies["BackColor"] != null)
{
  Request.Cookies.Remove("BackColor");
}
Az egyik új cookie Value értéke lesz a listában kiválasztott szín karakterlánca.
HttpCookie cookie01 = new HttpCookie("BackColor");
cookie01.Value = DropDownList1.SelectedItem.ToString();
cookie01.Expires = DateTime.Now.AddDays(10);
Response.Cookies.Add(cookie01);
...
A kollekcióhoz kell adnunk a cookie-kat. A műveletek végén a WebFom2.aspx lapra navigálunk. A lapon a BODY elem HTML kódjában elhelyezett ASP betéttel érhetjük el, hogy a SetSytle metódust futási időben meghívva beállítsuk a lap háttérszínét.
<body bgColor="<%=SetStyle()%>" ...>
A SetStyle metódusban lekérdezzük a Value értéket, majd visszaadjuk.
HttpCookie cookie = Request.Cookies["BackColor"];
if (cookie != null)
{
  return cookie.Value; 
}
...
Az utolsó látogatás dátumát megjelenítjük az egyik címkén. A lap tehát a felhasználó által beállított információt tudja használni a megjelenítés testre szabásához.
A cookie-ba belepillantva a következő adatokat kaphatjuk.
BackColor
Yellow
localhost/
1024
783197056
29601064
2258956608
29599052
*
LastVisit
2003.11.07. 17:30:59
localhost/
1024
783197056
29601064
2259266608
29599052
*

ASP.NET cikksorozat

Cookie funkciója, használata - ASP.NET 3. rész