.NET

Gestión de sesiones distribuidas en ASP.NET Core con Couchbase

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.

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:

Luego, en el ConfigureServices utilice AñadirSesión para añadir un servicio de proveedor de sesiones.

(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?

La gestión de sesiones en ASP.NET Core es una forma de almacenar y gestionar datos específicos del usuario a través de múltiples solicitudes dentro de una aplicación web. Utiliza un testigo de sesión, normalmente almacenado en una cookie, para asociar al usuario con sus datos en el servidor. Las sesiones pueden almacenarse en memoria, sistemas distribuidos o bases de datos, lo que permite una gestión escalable y eficiente del estado del usuario en las aplicaciones.

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-beta2 con el gestor de paquetes, o
  • dotnet add package Couchbase.Extensions.Session --version 1.0.0-beta2 con la línea de comandos dotnet

Couchbase Extensions with NuGet

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.

Por último, configure Couchbase como almacén de sesiones con AddCouchbaseSession.

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:

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.

Distributed session document in Couchbase

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.

El documento resultante tendría el siguiente aspecto:

Two distributed session keys

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:

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.

Output to ASP.NET from distributed session

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.

Session cookie

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.

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Autor

Publicado por Matthew Groves

A Matthew D. Groves le encanta programar. No importa si se trata de C#, jQuery o PHP: enviará pull requests para cualquier cosa. Lleva codificando profesionalmente desde que escribió una aplicación de punto de venta en QuickBASIC para la pizzería de sus padres, allá por los años noventa. Actualmente trabaja como Director de Marketing de Producto para Couchbase. Su tiempo libre lo pasa con su familia, viendo a los Reds y participando en la comunidad de desarrolladores. Es autor de AOP in .NET, Pro Microservices in .NET, autor de Pluralsight y MVP de Microsoft.

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.