Ver Mensaje Individual
  #5 (permalink)  
Antiguo 13/08/2009, 19:37
Avatar de marce_str
marce_str
 
Fecha de Ingreso: septiembre-2006
Ubicación: La Plata, Argentina
Mensajes: 203
Antigüedad: 17 años, 7 meses
Puntos: 1
Respuesta: Problema en descarga de archivos con PHP y Cookies

Con esto genero la cookie:

Código PHP:
if ($_POST['check'] == "on") {
                    
$valorCookie md5($loginUsername.date("Y-n-j H:i:s"));
        
                    
// Guardo el valor de la cookie en la base de datos
                    
$updateDATE sprintf("UPDATE usuarios SET cookie=%s  WHERE usuarioID= %s",
                                   
GetSQLValueString($valorCookie"text"),
                                   
GetSQLValueString($loginUsuarioID"int"));
            
                    
mysql_select_db($database_cnx$cnx);
                    
$Result1 mysql_query($updateDATE$cnx) or die(mysql_error());
                    
                    
// Guardo las cookies en el navegador
                    
setcookie("AP_usuarioID"$loginUsuarioIDtime()+(60*60*24*30));
                    
setcookie("AP_cookieID"$valorCookie,    time()+(60*60*24*30));
                } 

Y con esto la valido... es un lio, ya no me entiendo ni yo jeje...

Código PHP:
##############################################
#Controlo la existencia de Cookies
#############################################
//primero tengo que ver si el usuario está memorizado en una cookie
##########################################################################################################################
if (isset($_COOKIE["AP_usuarioID"]) && isset($_COOKIE["AP_cookieID"])) {##########################################################################################################################
       //Comprobar que esas variables no estén vacías
       
    
$usuario $_COOKIE["AP_usuarioID"];
    
$cookie $_COOKIE["AP_cookieID"];

    
//Voy a ver si corresponden con algún usuario
    
mysql_select_db($database_cnx$cnx);
    
$LoginRS__query sprintf("SELECT  
                                  usuarioID, 
                                  email, 
                                  password, 
                                  tipoID 
                                  FROM 
                                  usuarios 
                                  WHERE 
                                  usuarioID = %s AND 
                                  cookie = %s AND
                                  tipoID = 1"

                                  
GetSQLValueString($usuario"int"), 
                                  
GetSQLValueString($cookie"text"));
    
$LoginRS mysql_query($LoginRS__query$cnx) or die(mysql_error());
    
$loginFoundUser mysql_num_rows($LoginRS);
    if (
$loginFoundUser 0) {
                        
        
$loginStrGroup  mysql_result($LoginRS,0,'tipoID');
        
$loginUsuarioID  mysql_result($LoginRS,0,'usuarioID');
        
$loginUsername  mysql_result($LoginRS,0,'email');
    
        if ((!isset(
$_SESSION['MM_Username'])) && (!isset($_SESSION['MM_Username']))) { // Si no hay variables de sesión las cargo! porque caducaron
            //Declaro nuevamente las variables de sesión
            
$_SESSION['MM_Username'] = $loginUsername;
            
$_SESSION['MM_UserGroup'] = $loginStrGroup;
            
$_SESSION['MM_UserID'] = $loginUsuarioID;
            
                
            
$_SESSION['inicio'] = $MM_redirectLoginSuccess;
            
$_SESSION["ultimoAcceso"] =  date("Y-n-j H:i:s");
            
            
//Actualizo la fecha del último login del usuario que se registra
            
$updateDATE sprintf("UPDATE usuarios SET last_login=%s  WHERE usuarioID= %s",
                   
GetSQLValueString(mdsTSlocal($setGMT), "text"),
                   
GetSQLValueString($loginUsuarioID"int"));
            
mysql_select_db($database_cnx$cnx);
            
$Result1 mysql_query($updateDATE$cnx) or die(mysql_error());
        }
        
        
        if (isset(
$_SESSION['PrevUrl']) && false) {
            
$MM_redirectLoginSuccess $_SESSION['PrevUrl'];    
        }
        
header("Location: " $MM_redirectLoginSuccess );
    }
} else {
##########################################################################################################################
    
$MM_restrictGoTo "login.php";
    if (!((isset(
$_SESSION['MM_Username'])) && (isAuthorized("",$MM_authorizedUsers$_SESSION['MM_Username'], $_SESSION['MM_UserGroup'])))) {   
            
$MM_qsChar "?";
            
$MM_referrer $_SERVER['PHP_SELF'];
            if (
strpos($MM_restrictGoTo"?")) $MM_qsChar "&";
            if (isset(
$QUERY_STRING) && strlen($QUERY_STRING) > 0
                
$MM_referrer .= "?" $QUERY_STRING;
                
$MM_restrictGoTo $MM_restrictGoTo$MM_qsChar "accesscheck=" urlencode($MM_referrer);
                
header("Location: "$MM_restrictGoTo); 
                exit;
    } else {
        if (
$_SERVER['SERVER_NAME']!='localhost')  {
                
## Si no estamos en local verificamos la sesión para determinar si hay que expirarla
                //sino, calculamos el tiempo transcurrido
                
$fechaGuardada $_SESSION["ultimoAcceso"];
                
$ahora date("Y-n-j H:i:s");
                
$tiempo_transcurrido = (strtotime($ahora) - strtotime($fechaGuardada));
    
                
//comparamos el tiempo transcurrido
                
if ($tiempo_transcurrido >= 1200) {
                    
//si pasaron 20 minutos o más
                    
session_destroy(); // destruyo la sesión
                    
header("Location: login.php?msg=expire"); //envío al usuario a la pag. de autenticación
                    //sino, actualizo la fecha de la sesión
                
} else {
                    
$_SESSION["ultimoAcceso"] = $ahora;
                }
        } 
// Cierra el if de LOCALHOST asi no expira al realizar las pruebas
    
}


Te recuerdo que la funcion funciona (casi) bien cuando quito estas líneas
Código PHP:
header("Content-Type: ".$ctype);
header("Content-Disposition: attachment; filename=".basename($filename).";" ); 
Por eso debe haber algún problema con la cookie y los headers que especifico ahí