Navigace

Hlavnφ menu

 

Zßklady pou₧itφ cookies v ASP.NET

V Φlßnku si ukß₧eme, jak v ASP.NET pracujeme s cookies, jejich uklßdßnφ i Φtenφ. V ukßzkovΘm p°φkladu dßme u₧ivateli aplikace mo₧nost ulo₧it si svou volbu, aby aplikace i p°i pozd∞jÜφm pou₧itφ pracovala s ji₧ d°φve zvolen²m nastavenφm.

V ukßzkovΘ aplikaci budeme pracovat s jednou hodnotou. Hodnotu bude u₧ivatel volit zatrhßvacφm polφΦkem. P°i zatr₧enΘm poli bude aplikace zobrazovat bannery. Dφky ulo₧enφ do cookie si aplikace u₧ivatelovu volbu zapamatuje, a tak bude zachovßna i p°i dalÜφm vstupu do naÜφ aplikace - stav bude z cookie obnoven. ProhlΘdn∞te si ukßzku (zdrojov² k≤d). Pro ov∞°enφ sprßvnΘ funkce uklßdßnφ do cookie je nejlΘpe si otev°φt aplikaci ve dvou oknech, v jednom provßd∞t nastavovßnφ aplikace (dochßzφ k postback∙m) a ve druhΘm jen obnovovat okno (nedochßzφ k postbacku) a pozorovat v n∞m chovßnφ aplikace.

Pro prßci s cookies vyu₧φvßme t°φdu HttpCookie (vytvß°enφ, nastavenφ vlastnostφ) a HttpContext skrze vestav∞nΘ objekty (tzv. intrinsic) Request (pro Φtenφ) a Response (odeslßnφ klientovi).

<%@ Page Language="C#" Trace="False" EnableSessionState="False" Debug="False" %>
<script runat="server">
void Page_Load(object sender, System.EventArgs e)
{
  if (!IsPostBack)
  {
    HttpCookie myCookie = new HttpCookie("ckBanner");
    myCookie = Request.Cookies["ckBanner"];
    if (myCookie != null)
      chkStatus.Checked = Boolean.Parse(myCookie.Value);
    SaveCheckBoxStatus(sender,e);
  }
  ifrBanner.Visible = chkStatus.Checked;
}

void SaveCheckBoxStatus(object sender, EventArgs e)
{
  HttpCookie myCookie = new HttpCookie("ckBanner");
  myCookie.Value = (chkStatus.Checked).ToString();
  myCookie.Expires = DateTime.Now.AddYears(1);
  Response.Cookies.Add(myCookie);
}
</script><?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs-CZ" lang="cs-CZ" dir="ltr">
  <head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <title>Prßce s cookies</title>
  </head>
  <body>
    <form RunAt="server">
      <asp:CheckBox Id="chkStatus" AutoPostBack="True" OnCheckedChanged="SaveCheckBoxStatus" Text="zobrazovat banner" Checked="True" RunAt="server" />
    </form>
    <iframe Id="ifrBanner" Visible="false" src="ShowBanner.aspx" width="468" height="60" border="0" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" RunAt="server" />
  </body>
</html>

Ve webovΘm formulß°i mßme CheckBox, kter² slou₧φ k nastavenφ aplikace. Dφky vlastnosti AutoPostBack="true" dojde k odeslßnφ formulß°i pouh²m kliknutφm na prvek. Pokud bychom cht∞li aplikaci oprostit od zßvislosti na JavaScriptu, m∙₧eme mezi znaΦky noscript umφstit alternativnφ odesφlacφ tlaΦφtko. P°i zm∞n∞ nastavenφ je volßna metoda SaveCheckBoxStatus, kterß ulo₧φ aktußlnφ volbu do cookie (jejφ funkci si popφÜeme pozd∞ji).

Reklamnφ bannery zobrazuje v iframe aplikace, kterou jsme si vyrobili ji₧ d°φve. P°idßnφm atributu RunAt="server" jsme z n∞j vytvo°ili tzv. Html Control. M∙₧eme tak nastavovat i vlastnost Visible skrze identifikßtor Id.

P°i prvnφm naΦtenφ strßnky (IsPostBack je false) provedeme v obsluze Page_Load pokus o nastavenφ zatrhßvacφho polφΦka podle ulo₧enΘ hodnoty v cookie. Vytvo°φme si novou instanci cookie a nastavφme ji na naÜi hodnotu z Request.Cookies. Pokud nenφ hodnota z cookie p°eΦtena (klient nepodporuje cookies nebo pou₧il naÜi aplikaci poprvΘ), bude naÜe cookie null. Pokud nenφ null, pou₧ijeme metodu Boolean.Parse pro zφskßnφ stavu zatr₧enφ checkboxu. Dßle potom provedeme p°eulo₧enφ hodnoty cookie volßnφm metody SaveCheckBoxStatus, Φφm₧ se dosßhne nejen ulo₧enφ aktußlnφho stavu checkboxu (zj. v p°φpad∞, ₧e jde o v∙bec prvnφ spuÜt∞nφ aplikace a naÜe cookie v∙bec neexistuje), ale takΘ obΦerstvenφ doby platnosti naÜφ cookie (v naÜφ aplikaci ji uklßdßme s platnostφ jeden rok).

P°i ka₧dΘm naΦtenφ strßnky nastavujeme viditelnost prvku iframe (zobrazuje reklamnφ bannery) podle hodnoty checkboxu, Φφm₧ docφlφme zobrazenφ nebo skrytφ banneru.

P°i kliknutφ na zatrhßvacφ polφΦko je volßna metoda SaveCheckBoxStatus. Vytvo°φme instanci cookie (v naÜem p°φkladu s jmΘnem ckBanner). Hodnotu tΘto cookie nastavφme na °et∞zec odpovφdajφcφ stavu zatrhßvacφho polφΦka. Dßle tΘto cookie nastavφme dobu expirace, zde na dobu jednoho roku. Nakonec metodou Add() p°idßme cookie do kolekce cookies, kterΘ aplikace odeÜle klientovi v Response.Cookies. Pokud si tedy obsah hlaviΦek, p°ipraven²ch k odeslßnφ klientovi, nesma₧eme nap°φklad nevhodn²m pou₧itφm Response.Clear(), ulo₧φ se cookie u klienta, a to je vÜe, Φeho jsme v aplikaci pot°ebovali dosßhnout.

Zde popsan² zp∙sob prßce s individußlnφmi cookies samoz°ejm∞ nenφ jedin², ASP.NET poskytuje i mnohem komplexn∞jÜφ t°φdu HttpCookieCollection pro prßci s cookies v rßmci celΘ webovΘ aplikace. ASP.NET samo o sob∞ vyu₧φvß cookies pro uklßdßnφ dodateΦn²ch informacφ pro b∞h aplikace, nap°φklad identifikßtor session nebo pomocnΘ informace pro forms autentizaci. Prßce s nimi je u₧ ale na dalÜφ Φlßnek.

R∙₧iΦka, Pavel (15.1. 2004)
odborn² redaktor Interval.cz