La sesión distribuida es una forma de almacenar tu estado de sesión fuera de tu aplicación ASP.NET Core. Usar Couchbase para almacenar el estado de sesión puede ayudarte cuando necesites escalar tu sitio web, especialmente si no quieres usar sesiones pegajosas.
Puedes seguir los ejemplos de código que he creado, disponibles en GitHub.
Tenga en cuenta que Couchbase.Extensions.Session es una versión beta en el momento de escribir esto.
¿Qué es el estado de sesión?
El estado de sesión es simplemente una forma de almacenar datos para un usuario en particular. Típicamente, un token se almacena en una cookie de usuario, y ese token actúa como una clave para algún conjunto de datos en el lado del servidor.
Cómo activar la sesión en ASP.NET
Si está familiarizado con ASP.NET o ASP Classic, esto se hace utilizando Sesión. Todo el trabajo de las cookies se realiza entre bastidores, por lo que basta con utilizar Sesión como diccionario para almacenar y recuperar los datos que quieras.
|
1 2 |
si(Sesión["IsLoggedIn"] = falso) Sesión["Nombre de usuario"] = "mate"; |
Por defecto, en ASP.NET y ASP Classic, esta información se almacena en memoria, como parte del proceso de la aplicación web.
En ASP.NET Core, también puede optar por esto configurando la sesión con AñadirSesión.
En primer lugar, en Startup.cs, en el archivo Configure indique a ASP.NET Core que utilice session:
|
1 |
aplicación.UseSession(); |
Luego, en el ConfigureServices utilice AñadirSesión para añadir un servicio de proveedor de sesiones.
|
1 2 |
servicios.AddDistributedMemoryCache(); servicios.AñadirSesión(); |
(Esto utilizará la configuración predeterminada de la sesión, consulte la sección Documentación sobre ASP.NET Core para más información).
¿Qué es la gestión de sesiones en ASP.NET Core?
Una sesión distribuida es una forma de almacenar tu estado de sesión fuera de tu aplicación ASP.NET Core. Usar Couchbase para almacenar el estado de sesión puede ayudarte cuando necesites escalar tu sitio web, especialmente si no quieres usar sesiones pegajosas.
¿Por qué gestión distribuida de sesiones?
Sin embargo, si estás escalando tu aplicación web con múltiples servidores web, tendrás que tomar algunas decisiones sobre la sesión. Si continúa utilizando sesiones en proceso, deberá configurar sesiones fijas (el primer servidor web al que accede un usuario es al que se "pega" para las siguientes peticiones). Esto tiene algunas desventajas potenciales (ver este hilo en ServerFault y este artículo en la revista TechNet de Microsoft).
Si no desea utilizar sesiones fijas, no puede utilizar la opción de sesión en proceso. En su lugar necesitarás usar una sesión distribuida. Hay muchas opciones para poner los datos de sesión, pero la arquitectura de Couchbase que prioriza la memoria y sus capacidades de escalado flexible hacen que sea una buena elección.
Uso de la sesión distribuida en ASP.NET Core
Antes de empezar a escribir código, necesitarás un cluster de Couchbase Server funcionando con un bucket (yo llamé al mío "sessionstore"). También necesitarás crear un usuario con permisos de Data Reader y Data Writer en el bucket (yo también llamé a mi usuario "sessionstore" para simplificar las cosas).
Añadir Couchbase.Extensions.Session
Ahora, abra su aplicación ASP.NET Core en Visual Studio. (He creado una nueva aplicación ASP.NET Core MVC, que en GitHub). A continuación, con NuGet, instale la biblioteca Couchbase.Extensions.Session:
- Utilice la interfaz de usuario de NuGet (véase más abajo) o
Install-Package Couchbase.Extensions.Session -Versión 1.0.0-beta2con el gestor de paquetes, odotnet add package Couchbase.Extensions.Session --version 1.0.0-beta2con la línea de comandos dotnet

Configuración de Couchbase
Para configurar el proveedor de sesión, escribirás algo de código que te resultará familiar si has estado siguiendo esta serie de Couchbase.Extensions.
En ConfigureServices en Startup.cs es donde añadirás el código de configuración.
En primer lugar, utilice AddCouchbaseque se realiza con el Inyección de dependencia extensión.
A continuación, configure la caché distribuida para Couchbase con AddDistributedCouchbaseCacheque ya traté en una entrada del blog sobre caché distribuida.
|
1 2 3 4 5 6 |
servicios.AddCouchbase(op => { op.Servidores = nuevo Lista<Uri> { nuevo Uri("http://localhost:8091") }; }); servicios.AddDistributedCouchbaseCache("sessionstore", "contraseña", op => { }); |
Por último, configure Couchbase como almacén de sesiones con AddCouchbaseSession.
|
1 2 3 4 5 |
servicios.AddCouchbaseSession(op => { op.CookieName = ".MyApp.Cookie"; op.IdleTimeout = nuevo TimeSpan(0, 0, 20, 0); }); |
Puedes configurar el tiempo de espera (cuánto tiempo hasta que la sesión expira después de no ser utilizada), el nombre de la cookie, y más, si lo necesitas. En el ejemplo anterior, he configurado el tiempo de espera a 20 minutos y el nombre de la cookie a ".MyApp.Cookie".
Escribir en una sesión distribuida
Para acceder a los datos de la sesión, puede utilizar HttpContext.Session.
En primer lugar, quiero escribir algo a la sesión. En un Acerca de utilicé el controlador SetObject método:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
público IActionResult Acerca de() { HttpContext.Sesión.SetObject("sessionkey", nuevo { Nombre = "Matt", Twitter = "@mgroves", Guía = FechaHora.Ahora }); VerDatos["Mensaje"] = "He puesto un valor en tu sesión. Haz clic en 'Contacto' para verlo".; devolver Ver(); } |
A partir de este momento, cada vez que hagas clic para ver la página "Acerca de", se almacenará un nuevo valor en la sesión con la clave "sessionkey". Si cambias a la consola de Couchbase, podrás ver los datos almacenados.

Tenga en cuenta que la sesión de un usuario está representada por un único documento. Por lo tanto, si tuviera que insertar otro valor de sesión (como a continuación), ese valor se almacenaría en el mismo documento.
|
1 2 3 4 5 6 |
HttpContext.Sesión.SetObject("sessionkey2", nuevo { Dirección = "123 Main St", Ciudad = "Lancaster", Estado = "OH" }); |
El documento resultante tendría el siguiente aspecto:

Debes tener cuidado de no volverte loco con la cantidad de datos que pones en la sesión, porque los documentos de Couchbase están limitados a 20mb.
Lectura de una sesión distribuida
Para obtener un valor de sesión, puede utilizar GetObject y proporcionar la clave de sesión. En el código de ejemplo, hice esto en la sección Póngase en contacto con acción:
|
1 2 3 4 5 6 |
público IActionResult Póngase en contacto con() { VerDatos["Mensaje"] = HttpContext.Sesión.GetObject<dinámico>("sessionkey"); devolver Ver(); } |
Después de visitar la página "Acerca de" al menos una vez, vaya a la página "Contacto". Debería ver el objeto de sesión impreso en la página.

Eso es todo. Hay otros métodos relativamente evidentes disponibles en Sesión. También son descrito en la documentación de ASP.NET Core.
Una cosa más: he dado un nombre a la cookie (".MyApp.Cookie"). Puede ver esta cookie en el navegador de su elección. En Chrome, utilice Ctrl+Mayús+I y navegue hasta la pestaña "Aplicación". Verás la cookie y su valor.

Generalmente no necesitas conocer este detalle en tu día a día como desarrollador ASP.NET Core, pero es bueno saber cómo funcionan las cosas por si acaso.
Resumen
La extensión de sesión distribuida para Couchbase es otra herramienta en su caja para ayudar a escalar sus aplicaciones ASP.NET Core. Estas útiles extensiones .NET ayudan a demostrar cómo Couchbase es el base de datos de compromisos plataforma que necesita.
Si tiene preguntas o comentarios sobre Couchbase Extensions, asegúrese de consultar la sección Repositorio GitHub o el Foros del SDK .NET de Couchbase.
Y por favor, póngase en contacto conmigo con preguntas sobre todas las cosas .NET y Couchbase dejando un comentario a continuación o encontrándome en Twitter @mgroves.