2009-11-30 11 views
6

Así configuré el estado de sesión del servidor SQL utilizando SQL Server 2008 y la base de datos temporal y hoy decidí buscar los datos en las tablas solo para encontrar esto en la tabla ASPStateTempApplications :Estado de sesión del servidor SQL, granja web y configuración de IIS

AppId AppName
538231025/lm/w3svc/1/root
611758131/lm/w3svc/3/root
802488340/lm/w3svc/4/root
-940,085,065/lm/w3svc/4/root/webapp
685293685/lm/w3svc/5/root
1210055478/lm/w3svc/5/root/webapp

Tenemos 2 servidores web de carga equilibrada.

Cuando miro los identificadores de las aplicaciones web de ambos servidores veo que web1 tiene app1 con id 4 y web2 tiene app1 con id 5. Lo mismo ocurre con la otra aplicación. web1 tiene app2 con id de 1 y web2 tiene app2 con id de 3.

Mi sentido común me dice que los servidores web no están compartiendo sesiones ya que el ID de sesión usa la aplicación. ¿Estoy en lo correcto? Si es así, ¿por qué este pequeño detalle no es tan obvio en la documentación? ¿Debo hacer que los ids coincidan en ambos servidores web?

Respuesta

6

El AppId se usa durante la creación de SessionId, para ayudar a evitar colisiones de una aplicación a otra. Se crea calculando un hash de la ruta de la aplicación IIS.

En su entorno, el flujo podría ser algo como esto:

  1. Servidor A crea un identificador de sesión, lo pone en una cookie, y almacena algunos datos en la sesión correspondiente (una hilera de ASPStateTempSessions). La columna ID de sesión se crea al concatenar la ID de sesión con el ID de aplicación.
  2. El servidor B recibe una solicitud con una ID de sesión preexistente y la utiliza para buscar los datos de sesión asociados de la tabla ASPStateTempSessions. Si la ID de la aplicación es diferente, la clave generada también será diferente.

El efecto neto de tener múltiples servidores con diferentes AppIds que comparten las mismas sesiones es que los identificadores creados por un servidor no se chocan con los de otro servidor y máquinas con diferentes AppIds no verán entre sí de sesiones

+0

+1 buena explicación. – Saar

+0

De acuerdo con este artículo: http://msdn.microsoft.com/en-us/library/aa478952.aspx el sessionid de la tabla ASPStasteTempSessions es ID de sesión + ID de aplicación. ¿Qué tan seguro está de que ASP.NET cambie el ID de sesión del contexto y lo use en los servidores? –

+0

Acabo de verificar con Fiddler y SSMS que el AppId efectivamente está concatenado al final del ID de sesión como la clave en la tabla ASPStateTempSessions. He actualizado mi respuesta en consecuencia. – RickNZ

Cuestiones relacionadas