2008-11-20 16 views
14

Tengo un sitio creado con php que usa sesiones del lado del servidor en todo el sitio.
De hecho, es un sitio con un inicio de sesión de usuario que depende de las variables de sesión y si hubiera un problema con todas las variables de sesión, no se cargarían páginas en absoluto.La sesión de PHP no funciona con IE

En el sitio, hay un iframe que contiene un feed de pequeños mensajes de otros usuarios.
Esos pequeños mensajes tienen fotos clicables al lado de ellos que abren el perfil del usuario.
Ahora, cada página requiere algún formato para abrir el perfil del usuario en esa página específica ... solo hay unas pocas páginas con problema, pero esas páginas tienen que tener las funciones onclick formateadas de forma diferente o rompen la página.
Así que configuré una variable de sesión en cada página ($_SESSION["current_page"]) que permite que el feed sepa cómo formatear las fotos en las que se puede hacer clic. Ahora Firefox, Opera, Chrome, Safari funcionan como deben.
Pero IE6 e IE7 tienen problemas en las páginas que requieren un formato especial.
Así que después de sacarme un poco el pelo, finalmente logré imprimir las variables de sesión del servidor.
Y he aquí, en las páginas especiales, ($_SESSION["current_page"]) siempre se establece en "principal" en lugar de "especial1" o "especial2".

Imprimí la misma variable de sesión en Firefox y en todos los otros navegadores que mencioné e imprimen "special1" o "special2" como se supone que deben.
¿Alguien puede pensar en algo, posiblemente relacionado con el hecho de que la alimentación está en un iframe? - ¿Eso causaría que IE tratara las variables de sesión del lado del servidor de manera diferente o de alguna manera iniciara la página "principal" silenciosamente en el fondo?
He revisado el feed con mucho cuidado para cualquier referencia a la página "principal" - no parece que haya ninguna forma de cargar esa página.

esto no tiene sentido para mí.

+0

Para cualquier otra persona que tenga este problema, recomiendo cerrar completamente IE y volver a abrirlo. Esto me estaba sucediendo en IE10, y pasé aproximadamente media hora probando todas las soluciones a continuación sin ningún resultado. Aproximadamente 1 de cada 10 veces la sesión se mantendrá con vida el tiempo suficiente para que inicie sesión en mi sitio y luego vuelva a morir. Después de reiniciar el navegador, todo funciona bien. – mpen

Respuesta

9

Pruebe probar la página mientras utiliza algún tipo de proxy de supervisión (uso Fiddler) y vea qué páginas solicita el navegador. Eso podría darte algunas pistas sobre lo que está pasando.

Además, intenta capturar las solicitudes/respuestas de diferentes navegadores y ver qué IE está haciendo diferente (orden de las solicitudes, contenido de las solicitudes?).

Para identificar el problema, ¿puede reescribir el código sin utilizando SESSION (se menciona en una de las otras respuestas)? ¿Tal vez IE está accediendo a las páginas en diferente orden que otros navegadores? ¿Tal vez está solicitando la página principal más de una vez, lo que significa que la sesión var está configurada en "main"? Sin variables de sesión, las páginas no afectarán el estado del otro.

+2

Volver a escribir una aplicación web no siempre es una opción. No solo eso, sino que no resuelve el problema original, simplemente cambia todo a su alrededor. Sean: ¿alguna vez encontraste una causa o solución? – Kieveli

+0

Kieveli: buenos puntos. Quería sugerir cambiar a un código sin SESSION para ver si el problema persiste. Si no lo hace, le da una pista sobre dónde concentrarse. Por supuesto, si la aplicación usa sesiones prácticamente en todas partes, reescribiéndola solo para identificar el problema es bastante ineficiente. – Piskvor

0

Si lo entiendo correctamente, ¿está tratando de usar una variable de sesión para pasar datos de una página a páginas dentro de iframes en esa página? Esto no parece una buena manera de hacerlo, ¿por qué no simplemente pasar una variable GET en la URL iframe, es decir? Current_page = special1. Creo que esto sería más confiable, ya que no depende del estado de la sesión.

Recuerde también que las variables de sesión serán las mismas para varias páginas del mismo sitio que están abiertas en la PC de un usuario (por ejemplo, en varias pestañas), lo que podría causar un comportamiento extraño.

0

Los datos de sesión se almacenan en el servidor, no en el cliente.Verificaría las otras páginas, donde se establecería este valor.

10

IE tiene problemas de galletas con ella es la manipulación de los marcos flotantes, que tal vez la causa del problema sesión mencionas, echar un vistazo a estos enlaces

http://adamyoung.net/IE-Blocking-iFrame-Cookies

http://gathadams.com/2007/06/25/how-to-set-third-party-cookies-with-iframe-facebook-applications/

http://nileshtrivedi.in/blog/2008/09/01/iframe-cookies-and-internet-explorer/

+4

"Problemas" no es un resumen correcto. IE restringe deliberadamente las cookies en IFRAME de dominios cruzados a menos que exista una Política P3P. – EricLaw

+0

@ EricLaw-MSFT- Un poco tarde, pero esto explica exactamente el problema que tuvo recientemente. – DataHerder

+0

@Sijin ¡Muchas gracias! ¡Salvaste mi día! – andr111

30

Compruebe el nombre de la máquina servidor IE tiene problemas con los nombres de las máquinas que contienen '-' o '_' - ¡no pueden mantener una sesión! He tenido este problema dos veces en el pasado, y siempre me lleva semanas descubrirlo, y estoy sorprendido de que IE no lo haya solucionado.

¡Simplemente cambie el nombre de la máquina para que no tenga caracteres extraños! Puede hacerlo funcionar si solo usa la dirección IP del servidor en la url para probar.

+16

En realidad, eso está "roto como se esperaba": no se supone que los nombres DNS contengan guiones bajos (según el RFC). Todos los demás navegadores los toleran, pero IE, en su sabiduría infinita, simplemente deja caer silenciosamente las cookies de dichos sitios. Sin indicación, sin nada. No tiene precio. – Piskvor

+1

Eso fue un conocimiento maravilloso. Lo más irritante es que incluso las herramientas de desarrollo de IE son silenciosas. – Jasmo

+1

gracias por este insite, wow ... esto me dejó maravillado. – Petrogad

3

Pensé que algunas personas podrían encontrar la solución a este problema interesante. Fiddler ciertamente ayudó aquí. Gracias a Fiddler, pude ver que, de hecho, estaba accediendo a la página main.php (estableciendo así la variable de sesión momentos después de configurarla en la página de destino), pero el servidor estaba en default allí después de obtener un 302 en la raíz de el sitio. Todo esto sucedía silenciosamente en segundo plano, y antes de my onload = "" javascript funcionado.

Estaba seguro de que algo en esas páginas estaba causando un error, pero no catastrófico.

aquí está: <img src= "" >

IE estaba volviendo loco sobre el atributo src en blanco y golpear la raíz del servidor y el incumplimiento a la página principal. No entiendo completamente la mecánica que está sucediendo aquí. Tampoco entiendo si así es como se supone que IE se comporta (es una etiqueta de IMG mal formada después de todo) o no. ¿Es esto un error?

+1

Por razones heredadas/históricas, IE trata la url vacía "" como "/", que da como resultado la solicitud HTTP para la URL raíz. En su caso, esto es problemático porque esa solicitud da como resultado la configuración de una cookie que cambia el estado de su aplicación. – EricLaw

+0

Acabamos de pasar 3 días rastreando un problema de sesión de nuevo a esto. Al menos ahora sé por qué ... – jodeci

0

tuve el mismo problema con IE7 y esto es lo que hago:

Si usted tiene este problema utilizando un IIS o Apache en Windows Server, mira la URL en la que está redirigiendo hay que writed en el del mismo modo que la URL donde estaba antes de la redirección.

Por ejemplo: site.com/ páginas /index.php redirección a site.com/ Páginas /index2.php va a perder la sesión en IE7 porque la letra mayúscula en Páginas .

0

Tal vez es session.cookie_lifetime. He enfrentado el mismo problema. Actualicé session.cookie_lifetime: 4500 a session.cookie_lifetime:0. Esto significa que la cookie de sesión nunca caduca hasta que el navegador se apaga.

3

En la mayoría de los casos, esta línea php al comienzo del archivo será suficiente:

header('P3P: CP=”NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM”'); 

Si no lo es, para IE7 también puede probar:

header('P3P: CP=”NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM”'); 

header('Set-Cookie: SIDNAME=ronty; path=/; secure'); 

header('Cache-Control: no-cache'); 

header('Pragma: no-cache'); 

Y si Eso no t trabajo para IE6, se puede utilizar parametros GET de ID de sesión:

header('location: land_for_sale.php?phpSESSID='.session_id()); 
+0

¿Qué hace esto? – Philipp

1

he tenido este problema, y ​​era debido a la fecha en mi caja dev estar fuera. A Firefox no le importó, IE y Chrome vieron que la sesión había expirado tan pronto como se configuró.

2

Encontré si agregaste header('P3P: CP="CAO PSA OUR"'); al principio de tu documento. Parece que ha arreglado el problema.

1

Tengo el mismo problema y está RESUELTO ahora.

Los valores del atributo en blanco o vacío de cualquier etiqueta IMG causan el problema. Para mí, utilicé JavaScript para cambiar el origen del objeto IMG a un valor vacío. Hacer eso también podría causar el problema.