2008-11-19 18 views
6

Espero que alguien pueda aclararme este comportamiento y explicar cómo ASP.NET está decidiendo cuándo tratar algo así como una nueva sesión.ASP.NET y sesiones: nueva instancia del navegador frente a la nueva ventana del navegador

A) En Internet Explorer cargo el sitio ASP.NET en cuestión. Comienza una nueva sesión.
B) Si voy al menú Archivo - Nueva ventana ... permanece dentro de la misma sesión.
C) Si lanzo una nueva instancia de Internet Explorer y cargo la misma página, se inicia una nueva sesión.

Estoy confundido por el paso C. Espero que sea la misma sesión basada en mi IP remota.
¿Qué está haciendo IIS/ASP.NET para decidir si se trata de una nueva sesión? ¿Está buscando en mi puerto remoto la nueva instancia de IE? Cuando lanza una nueva ventana con Archivo - Nuevo usa el mismo puerto remoto que el padre.

Respuesta

13

Las sesiones en IIS/ASP.NET se basan en cookies con un alcance de sesión, lo que significa que se destruyen cuando se cierra el navegador y aparentemente no se comparten en los diferentes procesos de Internet Explorer.

Al abrir una nueva ventana del navegador con Archivo> Nueva ventana, la ventana se manejará por el mismo proceso que la primera (es decir, el mismo iexplorer.exe). Cuando lances IE desde el menú de inicio obtienes un nuevo proceso, y ahora tendrás dos iexplorer.exe en el Administrador de tareas. Creo que solo IE 7 generará múltiples procesos.

Como nota al margen, IE 8 tendrá un único proceso por pestaña/ventana, como Google Chrome. No sé si estos navegadores comparten cookies de sesión entre los procesos, pero sin duda es algo a tener en cuenta al probar con uno de estos navegadores.

+1

IE6 lo hizo también. No estoy seguro acerca de 5. – GalacticCowboy

+1

IE8 comparte sesiones entre pestañas y ventanas a menos que use la opción "Nueva sesión" en el menú de archivo. Esto tiene un comportamiento de ruptura en algunos de nuestros sitios como usuarios convertidos a IE 8. – Rozwel

0

Me pregunto si la nueva instancia de IE tendría las mismas cookies que suceden en el caso B, mientras que si es una ventana nueva está utilizando el mismo proceso. Por lo general, en la cookie o en la cadena de consulta se utiliza un valor para asignar sesiones a varios clientes.

4

De forma predeterminada, ASP.NET realiza un seguimiento de las sesiones a través de las cookies. Una nueva instancia de IE no tiene la cookie de sesión, lo que da como resultado una nueva sesión. Sin embargo, al usar Archivo -> Nueva ventana desde una ventana existente de IE creará una nueva ventana con las mismas cookies que el "padre", lo que permite a ASP.NET usar la sesión existente.

+1

También debería tener en cuenta que IIS y ASP.NET en realidad no tienen nada que ver con la diferencia de comportamiento que está notando. Además, tenga en cuenta que las sesiones no dependen de la dirección IP remota, que a menudo es la misma para muchos usuarios (es decir, un proxy). –

+0

Es exactamente lo correcto sobre la IP remota ... debería haber pensado en eso. ¿La cookie de sesión (frente a la cookie normal) forma parte de la especificación HTML? – BuddyJoe

+0

No creo que sea parte de la especificación, una cookie de sesión no es realmente diferente de cualquier otra cookie, excepto que su valor pasa a tener un identificador único que también es "conocido" para ASP.NET. Sin embargo, esta cookie normalmente se transmite como un encabezado HTTP de acuerdo con la especificación HTTP. –

0

Parece que los datos de la sesión se almacenan en caché por proceso. A) y B) existen en el mismo proceso, mientras que el lanzamiento de una nueva instancia de IE creará un nuevo proceso.

Cuestiones relacionadas