Como se sabe, Internet explorer es el navegador más usado. También tenemos la puñeta de que los clientes lo suelen tener como un estándar en sus oficinas, así que definen una consola sobre la que deban las aplicaciones funcionar y siempre aparece esa puta mierda de chapuza con capas encima. Cada nuevo release es un paso dentro del mundo del dolor, nunca una versión es compatible con la anterior, es como si otra marca decidiese crear un nuevo navegador pero conservando todos los fallos del anterior, eso sí. Y también, anuncian que, esta vez de verdad, lo han reescrito desde cero. Ja. Ja... Ja...
Bien. Uno de esos fallos se comenta en esta página:
http://stackoverflow.com/questions/1324181/ie8-losing-session-cookies-in-popup-windows
Consiste, y se habla mucho en la internez sobre ello, en que, cuando le da la gana, al abrir un popup no envía las cookies del padre. Para algunos servidores web esto es una cerdada porque conservan la sesión del usuario en una cookie. No digo que guarden datos importantes, pero el identificador de la sesión si que se guarda en una cookie.
En mi caso, es Java, hay un "jsessionid" que se va pasando en cada petición web para que el servidor reconozca a ese cliente como el dueño de la sesión que él tiene por allí almacenada. Por tanto hay una cookie jsessionid. Pues por javascript o con un simple enlace, abres otra ventana. Es muy común eso de poner lupas para buscar valores, un popup de alerta o lo que sea. Se abre la ventana y pumba, pantalla de login porque el servidor no reconoce la sesión...
Mi solución: Mi solución es poner una página en blanco con un javascript para solucionar el tema este. Es javascript porque se tiene que ejecutar en el cliente. A esta página se le envían los parámetros y la acción que queremos ejecutar en el popup, se carga, se ejecuta este javascript y, después, se recarga la página con la acción que se quería hacer desde un principio.
Mi javascript es muy muy sencillo, lo que hace es copiar las cookies de la ventana padre en caso de que sea Internet Explorer. Al ser IE el objeto window tiene opener:
if (window.opener) {
document.cookie = window.opener.document.cookie;
}
//TODO reload here!
Probado, funciona.
--
Nescit vox missa reverti.