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.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět