This article is currently in the process of being translated into Spanish (~99% done).
Cookies
Cookies son pequeñas piezas de texto, guardadas en la computadora del cliente para ser utilizadas solo por el website que las generó. Esto permite q las aplicaciones web guarden información sobre el usuario, y luego reutilizarla cada vez que dicha información sea necesaria. En el siguiente ejemplo se guarda el color de fondo que el usuario eligió:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!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" >
<head runat="server">
<title>Cookies</title>
</head>
<body runat="server" id="BodyTag">
<form id="form1" runat="server">
<asp:DropDownList runat="server" id="ColorSelector" autopostback="true" onselectedindexchanged="ColorSelector_IndexChanged">
<asp:ListItem value="White" selected="True">Select color...</asp:ListItem>
<asp:ListItem value="Red">Red</asp:ListItem>
<asp:ListItem value="Green">Green</asp:ListItem>
<asp:ListItem value="Blue">Blue</asp:ListItem>
</asp:DropDownList>
</form>
</body>
</html>
La siguiente página contiene un control de lista desplegable (DropDownList control), el cuál envía información al servidor cada vez que se selecciona un nuevo ítem. Tiene tres colores diferentes, además del color por defecto, el cuál es simplemente blanco. Una vez que se selecciona un nuevo ítem, el método "ColorSelector_IndexChanged" (SelectorDeColor_CambioDeIndex) se dipara desde nuestro archivo "CodeBehind" (CódigoPorDetrás).
using System;
using System.Data;
using System.Web;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if(Request.Cookies["BackgroundColor"] != null)
{
ColorSelector.SelectedValue = Request.Cookies["BackgroundColor"].Value;
BodyTag.Style["background-color"] = ColorSelector.SelectedValue;
}
}
protected void ColorSelector_IndexChanged(object sender, EventArgs e)
{
BodyTag.Style["background-color"] = ColorSelector.SelectedValue;
HttpCookie cookie = new HttpCookie("BackgroundColor");
cookie.Value = ColorSelector.SelectedValue;
cookie.Expires = DateTime.Now.AddHours(1);
Response.SetCookie(cookie);
}
}
Ok, aquí tenemos dos partes distintas a explicar. Primero, el método "Page_Load" (Pagina_Cargar), el cuál es llamado cada vez que se solicita la página. Aquí checkeamos la existencia de una cookie que nos dirá qué color de fondo debemos usar. Si la cookie está presente, es decir su valor es distinto de null, definimos el valor de la lista desplegable (dropdownlist) para que refleje dicho valor, así como también el color de fondo de la página, simplemente accediendo al atributo "style" (estilo) de la etiqueta "body" (BodyTag)
Luego tenemos el método "ColorSelector_IndexChanged" (SelectorDeColor_CambiarIndex), el cuál es llamado cada vez que el usuario selecciona un nuevo color. Dicho método setea el color de fondo de la página de acuerdo con el color seleccionado en la lista desplegable, luego crea una cookie para guardar dicho valor, la cuál caducará dentro de una hora y luego setea la cookie en el objeto response para ser enviada nuevamente al cliente.
Prueba replicar el ejemplo y selecciona un color de la lista desplegable. Ahora cierra el navegador, y ábrelo de nuevo. Verás como el color elegido previamente fue guardado, y permanecerá por una hora. De todas maneras, nada te impide guardar la selección por mas de una hora. Simplemente define un valor mas grande en el valor de expiración de la cookie (Cookie.Expires), o define un valor absoluto para el mismo.