IE8 pierde cookies de sesión en ventanas emergentes

Tenemos una aplicación ASP.NET que usa Forms Auth. Cuando los usuarios inician sesión, se generan una cookie de ID de sesión y un ticket de autenticación de formularios (almacenados como una cookie). Estas son cookies de sesión, no permanentes. Es intencional y deseable que cuando el navegador se cierra, el usuario se desconecta efectivamente.

Una vez que un usuario inicia sesión, aparece una nueva ventana usando window.open('location here'); . La página que se abre es efectivamente el espacio de trabajo en el que trabaja el usuario durante el rest de su sesión. Desde esta página, también se usan otras ventanas emergentes.

Últimamente, hemos tenido varios clientes (todos usando las últimas versiones de IE8) quejándose de que cuando inician sesión, la ventana emergente inicial los lleva a la pantalla de inicio de sesión en lugar de a su página de inicio. Alternativamente, los usuarios a veces pueden iniciar sesión, acceder a la página de inicio (que nuevamente aparece en una nueva ventana emergente) y todo parece ir bien hasta que se crean ventanas emergentes adicionales, donde comienza a redirigirlas a la pantalla de inicio de sesión. de nuevo.

Al intentar solucionar el problema, he usado Fiddler. Cuando el problema comienza a manifestarse, he notado que el navegador no está enviando la cookie de sesión de ID de sesión de ASP.NET O la cookie de sesión de ticket de autenticación de formularios, aunque la respuesta al registro en POST claramente empuja esas cookies.

Lo que es más extraño es que si CTRL + N abre una nueva ventana desde la ventana emergente que le falta a las cookies de la sesión y luego ingresa manualmente la URL en la página de inicio, esas cookies aparecen mágicamente de nuevo. Sin embargo, window.open(); posterior window.open(); las llamadas continuarán interrumpidas, no enviando las cookies de la sesión y llevando al usuario a la pantalla de inicio de sesión.

Es importante tener en cuenta que, a veces, por aparentemente no tener una buena razón, esos mismos usuarios pueden iniciar sesión de repente y trabajar normalmente durante un tiempo, luego vuelve a estar roto.

Ahora, me he asegurado de que no haya complementos de navegador, plug-ins, barras de herramientas, etc. en ejecución. Agregué nuestro sitio como un sitio confiable y dejamos caer la configuración de seguridad en Bajo, modifiqué la política de privacidad de cookies para “aceptar todo” e incluso deshabilité la configuración automática de las políticas, forzándola manualmente a aceptar todo e incluir cookies de sesión. Nada parece afectarlo.

También tenga en cuenta que la aplicación web reside en un único servidor. No hay equilibrio de carga, huertos web, granjas de servidores, clusters, etc. El servidor reside detrás de un servidor ISA, pero aparte de eso, es bastante sencillo.

He estado buscando por varios días y no he encontrado nada procesable. Diablos, a veces ni siquiera puedo reproducirlo de manera confiable. He encontrado algunas referencias a personas que tienen este mismo problema, pero parecen estar haciendo referencia a un problema que supuestamente se solucionó en una versión beta o RC (ejemplo: IE8 pierde las cookies al abrir una nueva ventana después de una redirección ). Estas son versiones de lanzamiento de IE, con parches actualizados.

Soy consciente de que puedo intentar establecer cookies permanentes en lugar de cookies de sesión. Sin embargo, esto tiene implicaciones de seguridad drásticas para nuestra aplicación.

Actualizar

Parece que el problema desaparece automáticamente cuando el usuario se agrega como administrador local en la máquina. Solo el tiempo dirá si este cambio de manera permanente (y positiva) afecta este problema.

Es hora de sacar ProcMon y ver si hay un problema de acceso a los recursos.

Actualización # 2

Parece que hay múltiples angularjs para lo que parece ser un problema singular. Hace mucho tiempo informé que hacer que el usuario fuera un administrador local parecía ayudar. Y lo hizo, para una cantidad de usuarios. Por supuesto, esa no es realmente una solución, pero nos permitió seguir adelante.

Luego, más usuarios comenzaron a informar el problema y la solución de administración no ayudaba. Los usuarios parecían ser principalmente Win7, pero Vista también se vio afectado. También parecían ser principalmente instalaciones de 64 bits.

Establecer el TabProcGrowth en 0 o 1 (ya sea funcionó) según lo sugerido por algunos miembros a continuación parece haber abordado en gran medida el problema. Entonces, voy a mover mi respuesta aceptada a la primera persona que sugirió eso, ya que ha tenido un impacto significativamente mayor.

Este ha sido un problema increíblemente frustrante para intentar resolver, ya que es difícil de reproducir y a menudo ocurre con usuarios con los que no tengo comunicación directa, o cuando los encuentro no parece funcionar. Todo lo que puedo decir es que algo no está bien con la función de fusión de sesiones, pero no tengo muchos datos que alimentar a Microsoft para encontrar una solución permanente.

¡Esta es una “nueva” funcionalidad en IE8!

Revisa el blog de IE8 a continuación para leer sobre él.

http://blogs.msdn.com/askie/archive/2009/03/09/opening-a-new-tab-may-launch-a-new-process-with-internet-explorer-8-0.aspx

IE8 puede usar múltiples procesos para manejar un número x de ventanas IE. Cuando cruzas un espacio de proceso, pierdes tus cookies (el ID de sesión de Asp.Net parece retenerse en este proceso).

Personalmente creo que está roto o es un error. Como sabemos, al realizar búsquedas en el “mismo destino del dominio” las cookies deben mantenerse y reenviarse. Ese IE8 tiene un comportamiento de procesamiento diferente para la seguridad … ¡Genial! que se está comportando mal y ‘descarta las cookies incluso si ir al mismo dominio objective en otra ventana’ es solo un error en mi opinión.

Puede modificar el número de procesos que utiliza IE8 a través de las opciones de Internet Explorer ehh .. modificando una configuración de registro !!!!!! (Esto es lo que lo convierte en un error en mi opinión. IE al proporcionar una interfaz de usuario para modificar estas configuraciones lo haría ‘aceptable a nivel empresarial’).

Considerar,

Marvin Smit

Hay múltiples posibilidades detrás de esto –

  • UAC y Vista (¡Tuvieron que surgir!). Específicamente, busque el comportamiento en modo protegido.
  • Esto podría ser un problema real con la función de fusión de sesiones en IE8 . Más aún porque abrir una nueva ventana mediante el atajo Ctrl + N hace que las cookies se envíen mágicamente en tu caso.
  • Un problema con una versión anterior de IE (sé que ha declarado que sus clientes están utilizando la versión más reciente). Es posible que desee comprobar los detalles disponibles en Microsoft Connect para los ID de error 408806 y 392032 .

Resolvimos este problema cambiando a “0 establecer el crecimiento del proceso de tabulación”.

Aunque no teníamos activado el modo protegido y la zona era “Intranet”. Evidentemente, este es un problema / error con Windows 7 64Bit como han indicado otros.

Esta página (# 4) me llevó a la solución: http://blog.httpwatch.com/2009/04/07/seven-things-you-should-known-about-ie-8/

Cerca de lo que puedo decir, otro cambio a las cookies en las tabs acaba de entrar en vigencia en esta actualización de seguridad del 12 de noviembre de 2013 que está rompiendo la funcionalidad en nuestra aplicación en todas las versiones de IE. Estamos haciendo OpenID auth en una ventana emergente para no tener que redirigir al usuario fuera de la página que estaban navegando cuando hicieron clic por primera vez en el enlace de inicio de sesión. La cookie de sesión para el inicio de sesión se envía correctamente en la solicitud en la ventana emergente, pero nunca se ve en la ventana principal del navegador, por lo que la siguiente solicitud al servidor no tiene esa cookie de sesión como debería, y, por lo tanto, iniciar sesión nunca funciona realmente.

¿Alguien tiene alguna posible solución a esto?

Tuvimos este problema en IE6,7 y 8. El escenario es parent window (1) abre una ventana modal (2), la ventana modal tiene un enlace a una ventana no modal (3). Solía ​​obtener una ID de sesión diferente en la 3ª ventana.

La solución mencionada aquí solucionó el problema http://support.microsoft.com/kb/831678

Desde IE8, nosotros (y nuestros clientes) también estamos experimentando el mismo problema. Tenemos un servicio de asp para crear formularios. Esta aplicación utiliza ventanas nuevas para agregar elementos o administrar cuentas de usuario, por ejemplo, aleatoriamente (cuando se abre una nueva ventana), la aplicación no obtiene el id. De sesión requerido para la autenticación junto con otras cookies “permanentes”. Por lo tanto, la identificación de la sesión es una cookie temporal. La mayoría de las veces va bien, pero otras veces la sesión se rompe cada vez que se abre una nueva ventana. Tenemos que aconsejar a nuestros clientes cerrar todas las ventanas de IE y comenzar de nuevo.

Como desarrollador web utilizo IE ampliamente. Personalmente, no estoy experimentando el problema anterior. Pero creo que uno relacionado. Algunas veces al día IE se cuelga por completo (no responde más) al abrir una nueva ventana. Cuando elimino cierto proceso de IE utilizando el administrador de tareas, IE comienza a responder de nuevo. Pero en la mayoría de los casos, es mejor comenzar de nuevo con una nueva instancia limpia de IE. Por esta razón, simplemente elimino el proceso con el menor uso de RAM que provoca que todos los procesos de IE se cierren.

Microsoft diciendo que estos problemas / errores están aplastados en la versión final no me da confianza de su esfuerzo para resolver el problema que aún se experimenta.

También encontré una solución factible para este problema. Parece haber un problema con la forma en que IE8 maneja la apertura de servlets en otra ventana con una ruta relativa como / test. Parece que está abriendo una nueva sesión, así como una nueva ventana. Nuestra solución viable es que, en lugar de abrir una nueva ventana con una ruta relativa, simplemente usamos una página jsp. Entonces, cuando navegamos hacia una URL, ya no navegamos / probamos más. Navegamos a un archivo específico. En el archivo jsp, reenviamos la solicitud a la ruta relativa. Esto parece funcionar, lo cual es un poco incómodo, ya que la única diferencia es que estamos colocando un archivo específico en el medio.

Espero que esto ayude.

Conozco este problema desde IE 5, así que solo uso las variables de la sesión en ventanas emergentes modales … Cuando abro una ventana emergente no modal, reemplazo todas las variables de la sesión con caché ASP.NET y nuevas colecciones de objetos. ¡Pero es muy tedioso!

Otros navegadores (es decir, Firefox) no tienen este problema …

Creo que esto es realmente un error en IE; Lo he informado aquí para ver los comentarios que recibo: http://social.msdn.microsoft.com/Forums/en-US/83bb3b91-1c1f-4d51-9281-9bc5f51d3640/log-in-fails-cookie-is- not-sent-to-originating-tab? forum = iewebdevelopment

Tengo un problema similar, aunque no idéntico. Cargamos una página web que abre una ventana emergente con window.open() en un control de navegador IE. En máquinas que tienen IE6 e IE8, la ventana emergente siempre recibe un nuevo ID de sesión por ASP cuando se inicia desde el control. Sin embargo, cuando se inicia desde un navegador normal (IE o Firefox), la ventana emergente obtiene el SessionID existente.

Puedo ver al lanzar desde el control que se genera un nuevo proceso iexplore.exe ; por lo tanto, el comportamiento de pérdida de sesión tiene sentido dado lo que se ha mencionado acerca de que las cookies en memoria no se transfieren al nuevo proceso.

Todavía estoy tratando de encontrar una solución yo mismo …

Actualizar

¡Encontrado una solución viable! Es posible SessionIDManager subclase de SessionIDManager y especificar que se debe usar esta clase en lugar del valor predeterminado ( en Web.config ). La subclase puede buscar un parámetro de consulta que contenga el ID de sesión existente en una modificación de CreateSessionID() y devolverlo si se encuentra. Esto esencialmente permite que una página solicite que se “fusione” en una sesión existente de la que tenga conocimiento.

La llamada a window.open() simplemente necesita ese parámetro de consulta especificado en su URL.

Haw-Bin

Tuve un problema similar con PHP5 e IE8. Al abrir una ventana emergente en Javascript con window.open, IE8 perdió la cookie de sesión y obligó al usuario a iniciar sesión en agan.

Mientras tanto, otras ventanas emergentes funcionaban bien.

El culpable resultó ser una etiqueta de imagen. El sistema de plantilla genera imagen src = valores dinámicamente y una imagen faltante dio como resultado una etiqueta de imagen con una cláusula src vacía (

Supongo que esto tiene algo que ver con IE interpretando la etiqueta src vacía como una URL insegura y aislando la sesión en la ventana emergente sin informar al usuario.

Me encontré con un problema similar con el uso de variables de sesión para pasar valores a una ventana emergente. Acabo de escribir los valores en una cookie persistente y luego leer la cookie en la ventana emergente. Puede que esto no funcione con el problema que tenías con la autenticación de formularios, pero si solo utilizas las variables de sesión para pasar algunos valores a una ventana en IE8, las cookies persistentes parecen haber funcionado para mí.

editar: vea también este hilo

También puede usar el método LocalStoprage para restablecer el valor en la ventana principal. localStorage (“Key”) = “Valor”; // Javascript