[ASP.NET/IIS] Como compartir las variables de Session entre diferentes Applicaciones Web

Hay momentos y aplicaciones que a veces debemos necesitamos compartir sus variables de session entre otras app web (sea con Webforms o ASP.NET MVC)

Esta fue una pregunta en los foros de MSDN pero también de un equipo de desarrollo donde hace par de meses donde estaba facilitando una capacitación en ASP.NET, así que dejo plasmado aquí (la ayuda memoria) y de como seria la manera de realizarlo con la configuración del administrador de estado de sesión.

La idea es este post es presentar un listado de opciones que tenemos para compartir y obligarme (cuando tenga un tiempo) de ir publicando mas en detalle y tener ejemplos de cada una para que sea más útil.

A la pregunta:

"…¿Cual es la mejor manera de compartir variables de sesión entre aplicaciones virtuales?…"

Compartir? Estas seguro?

La idea de compartir sesión si bien se puede realizar hay que evaluar bien este tipo de “conexión entre app” es decir evaluar arquitectura de app que tenemos…

  • Por que la naturaleza separada de estas app? están separadas en dominios de app diferentes y se quieren compartir datos?
  • Podriamos implementar un login común, pero bueno… eso es otro tema. Si es necesario un SSO (single-sign-on)
  • La arquitectura que se le da a las app web que estamos desplegando. Porque podríamos tener otras formas de compartir variables y que el usuario se siente libremente “paseando entre app web” (y porque no entre diferentes app en tu maquinas locales)
  • Por algo se realizan app separadas, si es necesario compartir algo seria otro tipo de arquitectura o mediante componentes comunes

Pero no es tema de este post pero es bueno que te detengas a pensarlo aunque sea tomando una cerveza.
Pero el tema que me atañe comentar son las formas de formas que tenemos de compartir la session del usuario… asi que

Las opciones que tenemos…

Si lo que quieres es compartir la variables de session podemos

  • OPCION 1: Cambiar el modo de estado de session (SessionState) a StateServer
    Para realizar esto debemos utiliza: el mismo nombre de cookie, la misma configuración del machineKey en el web.config de la app y además el mismo nombre de aplicación (que?)
    En esta ultima parte esta el problema, no es fácil cambiar el nombre de App (para el modo de StateServer, pero se puede) por default el AppName que da el IIS (que es algo asi LM/W3SVC/2/ROOT/WebSite1) o cambiamos la forma

<ayudaMemoria>{aquí va el enlace al post con mas detalle}</ayudaMemoria>

  • OPCION 2: Cambiar el modo de estado de session (SessionState) a SQLServer
    Utilizando el motor SQL Server ya sabemos para guardar el estado de session, esta opción es idem al anterior pero mas fácil ya que son procedimientos almacenados los que debemos modificar.
  • OPCION 3: Cambiar el modo de estado de session (SessionState) a Custom, 
    Y utilizar algún componente de proveedor de estado de session que hayas armado que contemple poder compartir las variables
  • OPCION 4: Utilizar una DB para compartir "elementos comunes"
    Idem al punto 3, pero tendríamos que codifica la lógica sin ayudarnos con un proveedor de estado de session
  • OPCION 5: Pasar variables de session mediante un mecanismo GET/POST
    Idem a la técnica para a pasar variables de session desde ASP Clásico, PHP, etc)… muy artesanal esta opción y difícil de mantener
  • OPCION 6: Utilizar Windows Server AppFabric Cache con un proveedor Custom de estado de session
    Bueno si bien esta opción es como la 3, aquí la vedette es Windows Server AppFabric y el servicio de Cache Distribuido (ex nombre clave Velocity)  que podamos instalarlo en varios servidores y administrar los objetos de cache agrupándolos por un simple nombre e incluso regiones (en vez de tener una sola “bolsa”), administración centralizada… la verdad una belleza.

NOTA 1: Creo que son estas 6 si hay alguna otra escriban mas abajo en comentarios así aumentamos conocimiento y estrategias Guiño

NOTA 2: Lo que no tengo es conocimiento sobre Azure en mi know-how, hasta que pueda tener mi codekata en algún proyecto

 

En este momento el post se hizo extenso así que lo particioné en estos temas para que sean mas cohesivos. Espero llegara escribir todos las opciones en artículos por separado o por lo menos tener enlaces para ayudar en cada caso

Necesito feedback al respecto, así que por favor sus comentarios son bienvenidos

  • Cuando utilizarla? Cuando no utilizarla?
  • Has necesitado esto alguna vez?

Espero que les sirva de ayuda o guía.

 

Delicious tags : , , , , ,

,