Tema: FAQ's de PHP
Ver Mensaje Individual
  #162 (permalink)  
Antiguo 31/05/2006, 02:17
Computer XTress
 
Fecha de Ingreso: diciembre-2004
Mensajes: 721
Antigüedad: 19 años, 10 meses
Puntos: 2
problemas al forzar descargas / redireccionar (perdida de valores de $_SESSION[])

Tema: Headers / Descargas forzadas

Pregunta: CASO1: Cuando uso un header() para redireccionar, no se guardan los cambios en las variables de session.
CASO2: Mi script de control de desarcagas funciona pero no permite navegar el sitio hasta que el download finaliza

Respuesta:
Para el CASO 1 lo primero es asegurarse que el SID (Identificador Unico de Session) se esté propagando por cookies y no por URL, ya que si este se está propagando por cookies y a su vez el browser no está siendo capaz de aceptar las cookies, esta puede ser la causa de la pérdida de valores de session. (Tener a bien realizar este control antes de utilizar la información a continuación)

En ambos casos la solucion es utilizar el comando session_write_close(); que forzara el guardado de los cambios en session (variables) y cerrará la sesion sin destruirla (es decir, cuando vuelvo a hacer un session_start() la misma session sigue en pie).

Este problema sucede ya que PHP guarda los cambios en las variables de session cuando el
script finaliza, y dado que un header() no significa el fin del script (sino un comando más), es necesario "forzar" el guardado y cierre de sesion.

Recordar que siempre se debe respetar el orden de los comandos de sesion, por ejemplo:

Código PHP:
session_start();

// Trabajamos con las variables de session
$_SESSION['contador']++;
$_SESSION['time'] = time();

(...)

// Antes de redireccionar, guardamos la session

session_write_close();
//redireccionamos
header("Location: /nueva_pagina.php"); 
Para el caso 2 haremos exactamente lo mismo. Colocaremos un "session_write_close()" antes de llamar a la función header(); (que para este caso, nos estará redireccionando al archivo a descargarse).

Espero sirva, más info en ar2.php.net buscar término: header()

[Edit: Gracias cluster por tu atención]

Última edición por Computer XTress; 05/06/2006 a las 20:38