La Web del Programador: Comunidad de Programadores
 
    Pregunta:  45527 - PROBLEMA CON LAS SESIONES Y IE
Autor:  rafa gomez
Hola,

nos hemos encontrado con un serio problema en nuestra aplicación, resulta que estamos utilizando una sesión para almacenar ciertos datos, pues bien el contenido de la sesión se puede recuperar perfectamente con Firefox pero NO es posible recuperar nada con Internet Explorer.

La cuestión es que conocemos la causa de este problema:
Para propagar el SESSION_ID estamos utilizando la directiva "session.use_cookies" que hace que PHP almacene automáticamente el número usando una cookie.
Bien, pues nosotros tenemos definido ademas un TimeOut de 5 minutos para dicha cookie usando la directiva session.cookie_lifetime = 300.

Lógicamente el servidor calcula el tiempo de caducidad de la cookie en base a LA HORA DEL SERVIDOR por lo que si la sesión se creó a las 13:20, se fijará el parámetro "expire" de la cookie a las 13:25.

Pero claro, desde el navegador la hora de caducidad se compora con la hora local del PC cliente con lo que si el tipo en cuestión tiene la hora retrasada a las 13:30 la cookie no llegará a generarse.

He visto que Firefox INGENIOSAMENTE cambia esta valor basándose en las horas del servidor de forma que cuadren con la hora que tenga el cliente (sea la que sea) pero este inteligente truco no lo hace Internet Explorer entre otras cosas porque en ningún sitio se documenta que se deba hacer asi.

En algunos sitios me comentan que avise a los clientes para que tengan la hora y la fecha lo más ajustada posible al servidor pero... ¿que pasa con los clientes de otros paises que tienen por fuerza otras franjas horarias?

También me comentan que deshabilite la propagación automática del SESSION_ID y los substituya por un sistema propio pero yo me pregunto... ¿que sentido tiene entónces la propagación por este método? ¿acaso la propagación del session_id solo esta garantizada cuando session.cookie_lifetime es igual a CERO?

Por favor, si alguien conoce una solución le ruego que la exponga aqui.

Saludos.

  Respuesta:  junko abc
hola,

una posible solución es calcular el periodo de inactividad en el servidor. cuando creas la sesion, guardas en una variable el momento en que ha sido creada, por ejemplo $ultimo_acceso.

cada vez que el usuario realiza una nueva petición al servidor, compruebas si ha pasado demasiado tiempo. Si es así, le rediriges a otra página y le informas de que la sesión ha caducado; si no, actualizas la variable $ultimo_acceso con la hora actual y le permites acceder.

puedes encontrarlo detalladamente aquí:

http://www.desarrolloweb.com/articulos/1991.php

suerte

  Respuesta:  orlando perez
supuestamente esta algo mal hecho porque la directiva session.use_cookies toma la hora del cliente y no la del server. en todo caso pedi que te traiga la informacion del cliente y luego se genere la cookie