TOC

This article has been localized into Spanish by the community.

HttpContext:

Cookies

HTTP, el protocolo que se encarga de la comunicación entre un servidor y un cliente en la web, se conoce como protocolo sin estado. En otras palabras, si un usuario solicita dos páginas en un servidor, no se compartirá automáticamente ninguna información entre estas dos solicitudes. En su lugar, un desarrollador tendrá que confiar en algo llamado cookies (o sesiones - más sobre ellos más adelante) para compartir información entre las solicitudes (requests). Esto es extremadamente útil en muchas situaciones, por ejemplo, para mantener un usuario conectado entre varias solicitudes, etc.

Casi todas las tecnologías del lado del servidor tienen soporte integrado para el manejo de cookies y desde luego el framework ASP.NET MVC lo hace también. De hecho, tratar con cookies es muy fácil, gracias a la funcionalidad encontrada en la clase HttpContext. En este artículo, aprenderás cómo establecer una cookie y cómo leerla de nuevo posteriormente, así podrás compartir información sobre un visitante en específico entre sus solicitudes.

¿Qué es una cookie?

Una cookie es básicamente un archivo físico de texto sin formato almacenado por el cliente (normalmente un navegador), vinculado a un sitio web específico. El cliente permitirá a este sitio web específico leer la información almacenada en este archivo en solicitudes posteriores, básicamente permitiendo que el servidor (o incluso el propio cliente) almacene información para su uso posterior.

Estableciendo y leyendo cookies

Establecer una cookie, y leerla de nuevo después, con ASP.NET MVC es muy fácil, muy muy fácil. Aquí está Cómo puedes enviar una cookie al cliente, en su forma más básica:

HttpContext.Response.Cookies.Append("user_id", "1");

Nota cómo uso la propiedad Response en la clase HttpContext, donde puedo acceder a la propiedad Cookies. Usando el método Append(), puedo agregar una Cookie a la salida, proveyendo un nombre y un valor para esto. El nombre (user_id) es lo que usaremos después para obtener el valor (1) de regreso. Obtener el valor de vuelta es tan simple como:

var userId = HttpContext.Request.Cookies["user_id"];

Nota como usó la propiedad Request en vez de la Response, cuando lo lees de vuelta - la razón es que establecer una cookie es hecho agregando información a la respuesta enviada al cliente, mientras leerlo significa que estás jalando información de una solicitud hecha por el cliente(un explorador automáticamente enviar a todas las cookies relevantes con cada solicitud).

Así que, ahora que sabes cómo escribir y leer información de una cookie, combinemos esto en un muy simple ejemplo, dónde llegamos una pieza de información como si un cookie no estuviera presente - esto será una gran forma de saber si un usuario ha visitado la página antes o no:

public class CookiesController : Controller
{
    public IActionResult Index()
    {
if(!HttpContext.Request.Cookies.ContainsKey("first_request"))
{
    HttpContext.Response.Cookies.Append("first_request", DateTime.Now.ToString());
    return Content("Welcome, new visitor!");
}
else
{
    DateTime firstRequest = DateTime.Parse(HttpContext.Request.Cookies["first_request"]);
    return Content("Welcome back, user! You first visited us on: " + firstRequest.ToString());
}
    }
}

Nuestra acción de controlador ahora produce respuestas basadas en sí el visitante ha visitado la página antes, revisando siempre por la presencia de una cookie con el nombre "first_request" - si una cookie no está presente, la agregamos, mientras establecemos el valor de la fecha y hora actual. Sí la cookie está presente, podemos asumir que el visitante ha visitado la página antes y podemos incluso decirle al visitante cuando su primera visita ocurrió.

Así que, estas son cookies básicas en pocas palabras y ahora sabes cómo escribir y leer. Pero Hay un poco más qué necesita saber, tú quieres tener total ventaja de las cookies.

CookieOptions

Como un tercer parámetro adicional al método Append() qué usamos, puedes pasar una instancia de la clase CookieOptions. Esto te permitirá ajustar varios aspectos importantes de tu cookie, por ejemplo cuánto debe de permanecer viva y cosas como dominio(s) y Ruta. Permiteme ir a través de las propiedades más importantes, pero primero, asegurémonos de que tú has incluido el nombre de espacios Microsoft.AspNetCore.Http, donde la clase CookieOptions vive:

using Microsoft.AspNetCore.Http;

Ahora tú puedes crear una instancia de la clase CookieOptions, la cual usará las configuraciones por defecto, juego las pasará al método Append():

CookieOptions cookieOptions = new CookieOptions();            
HttpContext.Response.Cookies.Append("first_request", DateTime.Now.ToString(), cookieOptions);

Antes de pasarlo (entre las dos líneas de código), tú querrás cambiar algunas de las opciones. Aquí están las más relevantes:

CookieOptions.Expires

Por defecto, tu cookie será una llamada cookie de sesión, significando que solamente vivirá tanto como el explorador permanezca abierto - una vez que el explorador se ha cerrado, la cookie es borrada por el explorador. Sin embargo, eres libre de cambiar este comportamiento usando la propiedad Expires. Esta propiedad es una instancia DateTimeOffset , la cual hace fácil configurar un tiempo de expiración, cómo este:

cookieOptions.Expires = new DateTimeOffset(DateTime.Now.AddDays(7));

Esto hará que la Cookie expire en 7 días. Tú puedes desde luego ajustar esto usando métodos como AddDays(), AddHours() entre otros.

CookieOptions.Domain

Por defecto, la Cookie será establecida para El dominio qué hizo la solicitud. Así que, si tu página es accesada por el dominio mywebsite.com, aquí será establecida para mywebsite.com. Si tu página es accesada utilizando un subdominio, este subdominio será usado, porque un subdominio puede ser "www". Así que, si tú página es accesada por www.mywebsite.com, la Cookie será, por defecto, solamente accesible desde www.mywebsite.com y NO mywebsite.com. Por lo tanto, puede ser una gran idea establecer la propiedad Domain para El dominio base de tu sitio web, prefijandolo con un punto, como esto:

cookieOptions.Domain = ".mywebsite.com";

Ahora tú cookie será accesible desde mywebsite.com tanto como todos los posibles subdominios. En otra mano, sí tú no tienes total control sobre el dominio, puedes querer limitar El dominio de la Cookie a un (sub)dominio en específico que controlas.

CookieOptions.Path

Por defecto, la ruta de la Cookie será establecida a "/", la cual básicamente significa que la Cookie será válida para todas las páginas del sitio web. Sin embargo, bajo ciertas condiciones, necesitarás una Cookie que sea válida solamente para una página en específico o carpeta. Esto es fácilmente logrado con la propiedad Path:

cookieOptions.Path = "/users/";

Con eso en su lugar, ahora solamente será visible y podrá leerse por por páginas en la carpeta "users", también como son carpetas de esta.

Más propiedades de CookieOptions

Hay varias otras propiedades interesantes que pueden ser encontradas en CookieOptions, cómo IsEssential, HttpOnly y Secure. Si tú quieres saber más sobre ella te sugiero que le eches un vistazo a documentation for CookieOptions.

Resumen

Gracias a las cookies, puedes guardar información sobre el visitante Y obtener la después en solicitudes subsecuentes. Esto es una técnica muy importante, usado en un amplio Rango de situaciones, cómo conservar al usuario logueado, rastrear su uso de tu sitio web y mucho más.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!