Ver Mensaje Individual
  #20 (permalink)  
Antiguo 14/04/2005, 16:10
elmaster
 
Fecha de Ingreso: abril-2005
Ubicación: Montevideo, Uruguay
Mensajes: 102
Antigüedad: 19 años
Puntos: 0
Neuron, no puedo asegurar las condiciones en las que hicistes tus pruebas. Pero ten en cuenta lo siguiente, session_start() no hace ningún tipo de detección de si el navegador acepta cookies o no, así que no dependas de ello. session_start() depende del método que tú indicaste para propagar el session_id, y no toma ninguna decisión por su parte.

Si tu has activado la directiva session.use_cookies en la ausencia de un cookie session_start() interpreta que no existía ninguna sesión y va a procurar crear una sesión nueva y propagarla escribiendo un cookie en el cliente. No hay forma dentro de la misma respuesta HTTP en la que escribes un cookie de consultar si el mismo fué efectivamente aceptado, por lo que session_start() no tiene un mecanismo válido sobre HTTP para dentro de la misma solicitud verificar si se pudo escribir el cookie, simplemente acepta como que se escribió y se inició la sesión. Si por algún motivo el cookie no se escribió, en el próximo llamado, va a pensar que no hay ninguna sesión, creará entonces una nueva e intentará nuevamente de escribir el cookie.

En el caso de que tengas activada la directiva session.use_trans_sid se va a utilizar la propagación del session_id por URL. Si esta directiva no está encendida esto nunca va a pasar.

A partir de php 4.3.0 en adelate apareció la directiva session.use_only_cookies que de estar activada asegura que no se va a utilizar propagación por URL bajo ninguna condición.

Si no se tiene acceso al php.ini, todas estas directivas se pueden manipular en tiempo de corrida por la función ini_set(), por ejemplo:

Código PHP:
ini_set("session.use_trans_sid"1);
ini_set("session.use_cookies"0);
ini_set("session.use_only_cookies"0); 
Establece que un sistema utiliza la propagación por URL del session_id.

De esta forma, asegurándose de setear todas las directivas a gusto en cada script, se puede establecer un comportamiento a placer de la propagación del session_id a lo largo de toda la aplicación web. Esto es lo mejor para no asumir nada acerca del entorno en el que estás corriendo.

Saludos!
__________________
Mauricio Etcheverry

WebMaster de YoReparo.com