Escribo este artículo a pedido de Miguel Michelson y el resto del equipo de OXUS.
Hoy durante el día, decidí revisar el sitio de uno de nuestros clientes, una aplicación que pronto saldrá a producción, en FireFox, Internet Explorer 7 e Internet Explorer 6, principalmente por los temas de diseño y ver que hacks deberían aplicar para nuestro querido Internet Explorer 6.
Comienzo a revisar cada paso y me doy cuenta de que algunas interacciones con AJAX no producen los resultados esperados en ninguna de las versiones de Internet Explorer antes mencionadas, pero si en FireFox, lo que ya había pasado la etapa de Q.A. para ambos navegadores por lo que me extrañó, luego de un rato de conversarlo con Miguel nos dimos cuenta de que era un problema con las sesiones, estas se regeneraban en las llamadas con AJAX por lo que se perdía toda la información guardada en ellas, lo que dejaba el sistema inutilizable ( NOTA: Todo esto probando en un servidor local ).
Muchas teorías nacieron, primero pensamos que era un tema de CakePHP, framework sobre el cual estamos desarrollando la aplicación, por lo que nos pusimos a buscar y como el que busca siempre encuentra, varios post y artículo sobre errores en sesiones, que bien ! ( no tan bien ) el problema es de CakePHP, una hora aplicando distintos fix, tanto en la aplicación como en el core de CakePHP ( no recomendable ), pero nada pasaba, el mismo problema, ya Miguel, Oscar y David estaban pensando en que podía ser, yo ya tenía la batuta y seguía probando.
Bueno no se pasa el id de la sesión, lo pasábamos de distintas formas, en estos momentos ya el ánimo no era el mejor ya llevábamos 3 horas sin resultados, todos pensando que hacer, esto se complicaba, buscando nos dimos cuenta de que habían registros y artículos del mismo problema, pero ya no sólo con CakePHP, sino que con PHP, entonces se me ocurre revisar si podía acceder a las cookies guardadas para el dominio en Internet Explorer por CakePHP, no habían cookies, obviamente en FireFox si las veía, colgados denuevo.
Ya realmente cansados, estábamos por decidir dejar este tema para mañana, porque llega un momento en que no nacen nuevas ideas, ya había revisado varias veces la documentación de PHP, sesiones, cookies y otros, leyendo comentarios, etc. Pero a uno siempre se le pasan algunos por alto, ya a punto de desistir por hoy, me meto nuevamente a la documentación de sesiones de PHP, pongo buscar “internet explorer” desde FireFox y me lleva al quinto comentario, no podía creer lo que estaba leyendo, 3 horas, todos pensando en cómo solucionar un problema crítico y este pequeño mensaje nos ahorro uno, dos o más días perdidos …
Csar
07-Mar-2008 12:38Thank you M$!!! Realy, thanks a lot for hours and hours and days to find why my PHP sessions worked in firefox but didn't work in internet explorer..."There's a bug in Internet explorer in which sessions do not work if the name of the server is not a valid name. For example...if your server is called web_server (_ isn't a valid character), if you call a page which uses sessions like http://web_server/example.php your sessions won't work but sessions will work if you call the script like this
[IP NUMBER]/example.php"
Era tan simple, como que estábamos usando en el servidor de desarrollo un nombre como aplicacion_desarrollo.local y nuestro querido Internet Explorer en sus distintas versiones al tener el caracter _ (inválido) no guardaba cookies para el dominio, al contrario de FireFox que si lo hacía, cambiamos rápidamente el nombre a aplicacion.desarrollo.local y todo funcionaba sin problemas, 3 horas para un tan básico error muy poco o nulamente documentado, y el comentario de la documentación, que como pueden ver fue hace un poco más de un mes y donde al parecer Csar cuenta que le tomó días encontrar la respuesta nos ahorro valiosas horas de trabajo.
Espero esto sirva de guía para que nadie cometa el mismo error, quizás podría haber sido un post más corto, pero contar la historia me sirvió para descargar la tensión, ese era el único dominio local que tenía el caracter _, por lo que nunca nos había pasado antes, espero que a ninguno le ocurra y que si le ocurre tenga la suerte de encontrar este post o el de la documentación de PHP.
Super loco el tema, esta bueno saberlo
pienso q el que esta bien en este caso es IE ya que es un carácter invalido para nombre de dominio….
Wooa! En serio _ no es valido en un nombre de dominio? La verdad nunca me encontré con ninguno por lo que supongo que no debe serlo, pero jamas me lo habia cuestionado,
Yo tengo tambien un caso curioso, al menos para mi ke soy nuevo en esto de las sesiones…
Al parecer las variables de sesion en Explorer no se pasan de una peticion a otra y por mas ke busco no encuentro ninguna solucion valida a mi problema.
Pense ke este post me arrojaria algo de luz, pero nada mas lejos de la realidad ya ke es muy diferente. Aki trabajais con ultimas tecnologias y yo estoy sufriendo con una sencilla internacionalizacion.
Mi codigo es bastante simple y funciona en todos los navegadores excepto Explorer….casualidad o causalidad?
Explorer apesta y hace la vida imposible, sobre todo a los ke se inician.
Con lo del viaje Shaggy cometí el gran error de no revizar mi Blog, espero ( ya que han pasado casi 11 días ) que hayas encontrado la solución, si no postea más información haber si te puedo ayudar.
No te preocupes Pedro, agradecido estoy de ke respondas y me ofrezcas tu ayuda.
La verdad es ke he dejado apartado el problema de momento (y algun otro tambien) y he continuado haciendo otras cosas. Digamos ke lo dejo para la fase de testeo.
Pues bien, la cuestion es ke estoy desarrollando mi primer site de la forma mas profesional ke puedo. Antes hacia muchas cosas pero usaba un CMS y me ahorraba muchos problemas. Ahora estoy desarrollando todo yo.
Pues bien, el site en cuestion pretendo ponerlo en dos idiomas, pero sin usar cookies ni DB, solo con sesiones.
El codigo kizas no este todo lo limpio ke deberia, pero si es bien sencillo, aunke a Explorer eso no le importa.
Funciona correctamente en Firefox, en Safari y en Opera. Podria haber probado alguno mas pero no lo veia necesario. Practicamente el 95% usa Explorer y Firefox.
Como lo hice? Pues manteniendo una sola variable de sesion donde se guarda el idioma solicitado por formulario, y a la hora de incluir los modulos de la web, se consulta esa variable para tomar un archivo de idioma u otro.
Por alguna razon ke desconozco, Explorer a cada peticion ke se le hace, crea una sesion nueva y no mantiene activa la anterior, y este error lo he comprobado tanto en IE7 como IE6.
Es posible ke mi codigo, a pesar de sencillo, no este perfecto, pero de tener errores, no funcionaria en los demas navegadores….digo yo.
En fin Pedro, mas o menos este es el problema. Kizas puedas darme una alternativa diferente ke no me obligue a modificar toda la estructura del site.
Muchas gracias
Algo recuerdo cuando encontré la solución a mi problema, haber pasado por muchos foros y artículos de problemas en IE6-7 en cuanto a sesiones, Google es el mejor aliado en estos casos, pero primero debes partir de la base que al crearse una sesión en PHP, se guarda una cookie en el navegador que permite la continuidad a travéz de las páginas de la misma, lo que lleva a 2 temas:
1.- Verifica creando cookies con PHP que estas se mantengan hasta la fecha de expiración ( por cada petición está generando una nueva sesión lo que puede ser un problema con la cookie de la sesión )
2.- Sería una buena solución más allá del tema de la sesión que guardes una cookie con el idioma seleccionado, así tu usuario no necesitará cada vez que entre al sitio desde el mismo navegador elegir el idioma nuevamente
Estás trabajando a PHP puro o con algún framework ?
Quizás este link te sirva, hay algunas de las posibles soluciones http://genotrance.wordpress.com/2006/11/23/session-cookies-rejected-by-internet-explorer/
Heeeeeey esta vez si ke has contestado rapido jajajaja
Bueno, por desgracia en Google no encontre nada valido o lo suficientemente explicado y/o fundamentado. Mucha gente postea cosas sin saber lo ke pone y a veces sin saber ni lo ke dice. En algunos sitios lees una cosa y otros todo lo contrario….
Cuando dije sin cookies, keria decir sin crearlas yo jeje Para lo ke necesito en esta web, las sesiones me hacen bien el trabajo y no obligo a dejar una cookie residente aunke caduke.
En cuanto a lo primero ke me dices, kizas deba tocar algo en el php.ini de mi servidor aunke pienso lo mismo ke antes, de estar algo mal en el ini, fallaria en todos y no solo en explorer. Probare lo ke me has dicho de todos modos para ver si el fallo esta en la cookie.
En cuanto a lo segundo, en principio, el propio codigo coge el lenguaje del navegador, por lo ke el usuario vera la web en su idioma por defecto. Es muy raro ke un usuario kiera ver la web en otro idioma, pero aun asi permito el cambio por si, por alguna razon, debe ver la web en el otro idioma. No se mantiene esa preferencia para futuras sesiones, pero si en la ke este activa mientras el usuario no cambie de nuevo el idioma.
Y por ultimo, en cuanto a tu pregunta….PHP puro y duro. Kreo ke es lo mejor para dominarlo bien. Cuando ya este mas experimentado, la intencion es crear un CMS basado en Zend. Con el framework no kreo ke hubiese tenido este tipo de problemas.
Probare lo ke me has comentado y le echare un ojo a ese link, a ver si doy con la clave.
Muchisimas gracias por todo. Da gusto encontrarse con gente como tu dispuesta a ayudar a los demas.
Pues parece que Internet Explorer te la ha jugado…
Soy principiante en PHP y estuve haciendo mis primeros ejercicios siempre probándolos en Firefox, pero cuando se me ocurrió probar con Internet Explorer 6, no funcionaron… busqué en google algo al respecto (usando en el campo de búsqueda la expresión: php firefox “internet explorer”) y hallé en el primer lugar tu sitio:
http://sincklation.com/2008/04/16/sesiones-que-funcionan-en-firefox-pero-no-en-internet-explorer/
Le hice clic desde Internet Explorer 6 ¡y tu página no se desplegó! tomé la dirección y la usé desde firefox y pude leer la nota en tu blog, interesante por cierto, pero sigo sin lograr ver mis pequeños ejercicios de PHP en Internet Explorer y tampoco tu blog (cuando hago clic en las pestañas desde IE el contenido “pestañea” [je je] –se ve y luego se oculta–).
Leobardo, finalmente IE6 termina por cansar, de hecho nunca me tomé la molestia de revizar el blog en IE6, asumí que K2, el tema base que utilizo en este blog funcionaba bien en IE6, lo revizaré …
En general mi preocupación por IE6 va para proyectos de clientes y me dejo estar en cuanto a mi sitio, cuentame tu problema haber si te puedo ayudar.
jajajajjaa este articulo fue mi salvacion , en serio , muchas gracias por publicar esto, igual todo funcionaba perfecto en Firefox pero en IE nada, y el problema fue el nombre del Dominio, jajajajj
Salduos desde Sinaloa , Mexico
Muchas gracias por haberos tomado la molestia de publicar este articulo.
Erá exactamente lo que me estaba ocurriendo y aunque he invertido un par de días en encontrar la solución por lo menos he aprendido mas sobre la “session”.
Saludos,
Ernesto.
Me cago en los hijos de mil puta de Chotosoft por ser tan inutiles carajo.
Estuve una hora luchando con este tema, gracias man por este post.
Madre de dios ruega por nosotros programadores, si no es por que encuentro este post… hubiese estado mil años cabeceandome… bendito sea el que encontró el error
Gracias por el dato! Al igual que ustedes, más de 3 horas buscando la falla en IE!
PD: ODIO IE
Estimado, llevo varias horas tratando de resolver este tema con IE para una intranet, buscaba y buscaba pero no encotraba nada raro, estuve insistentemente pensando en que mi problema se registraba en el php.ini, en las sesiones o en los permisos del tmp. Una vez que no logre resultados decidi probar con firefox, lo que me angustio mas pues con firefox si funcionaba. Por esta razón acudi a quien muchas veces soluciona mis problemas, San google y llegue a tu solución.
Gracias maestro!!!
hola, llevaba mas de 4 dias con este problema que se me perdia el valor de mis variables de sesion, cansado de buscar llegue al fin aqui, no creia que el tan insoportable problema tendria una solucióntan tan simple,jamas hubiese pensado que el insignificante _ pudo ocasionarme 4 dias de trabajo.. jaja.
Gracias por la solucion…
Saludos
Gracias, llevaba dos días con este problema… tiempo atras lo había tenido con Moodle… pero no lo había relacionado.
Gracias!!
Gracias, me has ahorrado dias de pruebaas y dolores de cabeza.
Muuuuuchas gracias.
Hi, very nice post. I have been wonder’n bout this issue,so thanks for posting
Gracias, gracias, gracias, gracias, gracias, gracias, gracias
Gracias, gracias, gracias, gracias, gracias, gracias, gracias
Gracias, gracias, gracias, gracias, gracias, gracias, gracias
Gracias, gracias, gracias, gracias, gracias, gracias, gracias
Gracias, gracias, gracias, gracias, gracias, gracias, gracias
YO Sí HE PERDIDO UN DÍA POR EL *** MS IE
Felicidades, felicidades, felicidades, felicidades, felicidades
Felicidades, felicidades, felicidades, felicidades, felicidades
Felicidades, felicidades, felicidades, felicidades, felicidades
Felicidades, felicidades, felicidades, felicidades, felicidades
Felicidades, felicidades, felicidades, felicidades, felicidades