2012-06-30 10 views
7

que estoy tratando de ayudar a un amigo - que tienen una aplicación web bastante grande (ASP.NET 4.0, Visual Basic) que tiene una serie de subcarpetas que todos actúan como sub-cuasi aplicaciones (pero son solo subcarpetas de la aplicación principal). Esta aplicación se dividirá en múltiples aplicaciones web independientes porque en su forma actual es difícil de mantener y desarrollar más.datos de la sesión entre las aplicaciones web ASP.NET

El problema es que la aplicación monolítica actual utiliza una serie de variables de sesión para cosas como información del usuario (después del inicio de sesión, etc.). Me pregunto si hay una manera fácil de compartir esta información entre las futuras aplicaciones web múltiples (que obviamente tendrá sesiones independientes). El estado de la sesión se almacena en SQL Server. Los usuarios de la aplicación web actual son todos usuarios externos y no todos los usuarios tienen acceso a todas las "sub-aplicaciones".

Busco algunos consejos acerca de estas dos cosas:

1. ya he hecho un poco de búsqueda y encontró un solo inicio de sesión - esto parece resolver el problema de la autenticación a través de estas aplicaciones, pero I' No estoy familiarizado con él y no entiendo cómo se elimina la información de autenticación si la "sesión" expira, ya que las diferentes aplicaciones web tendrán diferentes sesiones. ¿Es posible desconectar a un usuario de todas las aplicaciones web una vez que la sesión caduque en una de ellas?

2. Sospecho (pero no estoy seguro) de que puede haber algunos otros datos de sesión encima de la información de autenticación que puede ser necesario compartir después de la división. ¿Cuál sería la mejor manera de hacer esto (de nuevo de manera confiable y segura)?

He encontrado this article about passing IDs (a base de datos de registros que contienen los datos compartidos) y se preguntan si es bueno.

Todos los consejos serán apreciados.

PD: He encontrado un número de hilos aquí en SO sobre esto, pero no creo que ninguno de ellos responder a estas preguntas específicas. El más útil que encontré fue la siguiente:

Sharing data between ASP.NET applications

+0

todas las aplicaciones están en el mismo dominio o diferente? – MMK

+1

Creo que todos estarán en el mismo dominio. Actualmente es solo una aplicación y creo que planean la división en el mismo dominio. – xxbbcc

+0

Estoy buscando compartir el ID de sesión entre la aplicación bajo el mismo dominio. –

Respuesta

11

Finalmente encontré la solución a este problema y lo estoy dejando aquí como referencia a otros:

StateServer utiliza un servicio de Windows (Servicio de estado de ASP.NET) que se ocupa de las sesiones en la memoria. Utiliza el MachineKey, AppDomainAppID y el SessionID para identificar de forma única una aplicación.

  • Establezca la misma MachineKey en web.config para que sea la misma para todas las aplicaciones en el sitio.
  • Agregue código en Global.asax Init() para configurar AppDomainAppID para que sea el mismo para todas las aplicaciones.
  • Implemente ISessionIDManager y devuelva ID de sesión personalizada para que se vuelva a utilizar en las subaplicaciones.

Los siguientes enlaces proporcionan la información a la aplicación real que hice:

+0

Hola, ¿funcionará esta solución cuando tengo un sitio web ASP.NET 4.5 y otro sitio web ASP.NET 5/MVC 6? Necesito desesperadamente el mismo ID de sesión para el nuevo sitio web que estoy agregando. Esto me ayudará a consultar una gran cantidad de detalles disponibles en la base de datos. –

+0

@Wayofhope No sé la respuesta (no he usado MVC 5/6) pero me imagino que esto funcionaría (aunque podría estar equivocado). Sugiero que lo pruebes. Si funciona, agradecería que dejaras un comentario aquí para futuros lectores. – xxbbcc

2

Es posible compartir la sesión ASP.NET entre diferentes aplicaciones. Obviamente, todas las aplicaciones que comparten la misma base de datos de estado de sesión necesitarían estar en la misma versión de ASP.NET (en una versión donde las bases de datos de estado de sesión son compatibles). Además, todas las aplicaciones para compartir necesitarían mantenerse coordinadas sobre cómo se mantiene la información en el estado de la sesión. Por ejemplo, una variable de sesión necesitaría mantener información y significado compatibles entre la aplicación.

Cuestiones relacionadas