2010-07-09 35 views
6

Tengo dos aplicaciones idénticas configuradas en IIS en diferentes directorios virtuales (he hecho algunas soluciones para asegurar que ambas tengan el mismo nombre de aplicación). ¿Hay alguna forma de compartir la identificación de sesión en dos aplicaciones web asp.net?Cómo mantener el mismo ID de sesión en varias aplicaciones web en ASP.NET

Dado que estoy almacenando la sesión en StateServer, ambos deberían obtener los mismos datos de sesión, sin embargo, se crea una identificación de sesión diferente cada vez que voy de la aplicación a a la aplicación b. ¿No sucedería esto en un escenario de equilibrio de carga también? Cuando vaya a www.test.com, redirigiría esa solicitud al servidor a, y luego, si la golpeo de nuevo, iría al servidor b, pero dado que es una aplicación web diferente, crearía una nueva identificación de sesión ?

+0

Solo échelo en una base de datos. Está haciendo lo imposible para adaptarse a las limitaciones de la sesión. –

+0

La base de datos tendría el mismo problema a menos que aplique una solución alternativa. Como se trata de dos aplicaciones diferentes en la base de datos, tendría 2 sesiones separadas. –

+0

Usted no entiende mi sugerencia. En lugar de utilizar la sesión * en absoluto *, coloque los datos persistentes que necesite en una base de datos común. Las sesiones y las cookies están diseñadas para evitar que las aplicaciones se pisen entre sí, lo que requiere aislamiento. Esta es una de las muchas cosas para las que son buenas las bases de datos. –

Respuesta

7

Primero, configure el elemento sessionState en su web.config para usar cookieName = "SOME_COOKIE_NAME_HERE" en ambas aplicaciones.

Luego, solo asegúrese de que las URL tengan el mismo TLD (dominio de nivel superior), es decir, app1.midominio.com y app2.midominio.com, y debe poder manejar el evento Session_Start en Global.asax y ponerlo este código:

HttpCookie cookie = new HttpCookie("SOME_COOKIE_NAME_HERE", Session.SessionID.ToString()); 
    cookie.Expires = DateTime.Now.AddMinutes(20); 
    cookie.Domain = "*.mydomain.com"; 
    cookie.HttpOnly = true; 
    Response.SetCookie(cookie); 

Además, recomendaría que vaya con el modo SqlServer SessionState.

+0

¿Esto también funcionaría con el modo de sesión StateServer? –

+0

No veo por qué no. –

+0

Interesante. Después de aplicar este cambio, obtengo una nueva identificación de sesión por solicitud. Aquí está mi código Global.asax: \t vacío Session_Start (object sender, EventArgs e) { \t \t \t HttpCookie galletas = new HttpCookie ("SessionCookie", Session.SessionID.ToString()); \t \t cookie.Expires = DateTime.Now.AddMinutes (20); \t \t cookie.Domain = "* .keivantest.com "; \t \t cookie.HttpOnly = true; \t \t Response.SetCookie (cookie); \t} Aquí está mi configuración web.config: \t \t

-1

¿Su objetivo es compartir el estado de la sesión entre 2 aplicaciones, no solo la ID de la sesión? Creo que StateServer también usa la ruta de la aplicación y el SessionID para almacenar los datos, por lo que incluso si los SessionID fueran los mismos, aún no podría compartir los datos. Puede que tenga que escribir su propio módulo de sesión.

Las aplicaciones web de equilibrio de carga no tienen este problema porque la ruta de la aplicación es la misma en todos los miembros del clúster.

+0

Estás en lo correcto. Estoy usando un httpmodule para establecer el mismo nombre de aplicación para ambas aplicaciones con el mismo valor. –

+0

Dijo que se tomó la molestia de obtener el mismo nombre de aplicación –

1

Inicialmente me enfrenté al mismo problema. Lo que hice fue eliminar el ID de jsession de cada dominio. Quiero decir, si el usuario aterriza en domain1.com, establezca la misma identificación de sesión para domain2.com de iframe. y viceversa. Con esto, puede mantener la misma sesión en varios dominios.

Debe probar el impacto en varios servidores a través de la red con el equilibrador de carga.

Cuestiones relacionadas