Foros del Web » Programando para Internet » PHP »

Llamada duplicada a header

Estas en el tema de Llamada duplicada a header en el foro de PHP en Foros del Web. Tengo un problema muy raro... tengo la siguiente aplicacion que basicamente decide a que archivo pasarle el control (aun no esta terminada). Si el usuario ...
  #1 (permalink)  
Antiguo 16/12/2011, 19:56
Avatar de Chico3001  
Fecha de Ingreso: septiembre-2011
Ubicación: Mexico, DF
Mensajes: 112
Antigüedad: 13 años, 2 meses
Puntos: 12
Llamada duplicada a header

Tengo un problema muy raro... tengo la siguiente aplicacion que basicamente decide a que archivo pasarle el control (aun no esta terminada). Si el usuario trata de abrir el archivo directamente sin haberse registrado antes, guardo el intento (IP, fecha, y nombre de archivo accesado) en la base de datos y redirecciono a la pantalla de ingreso

Código PHP:
<?php
require_once('include/startup.php');


if(!isset(
$_SESSION['token'])) {

    global 
$self;
    
$ipv4 sprintf("%u"ip2long(getenv('REMOTE_ADDR')));

    
// Guarda variables en la lista negra para analisis posterior
    
$bd=Db::getInstance();

    
$sql="INSERT INTO config_listanegra (ip,intento,usuario,clave)
        VALUES ('$ipv4','0','$self','null')"
;
    
$bd->insertar_dato($sql);

    
session_destroy();
    
header("Location: entrar.php");
    }


// Arbol de decisiones
$action limpiar_html($_GET['action']);

// Obtiene nivel y zona
$bd=Db::getInstance();

switch (
$action) {

    default:
        
header("Location: stats.php");
        break;

    case 
"salir":
        
$sql="UPDATE config_listablanca
            SET salida= NOW()
            WHERE token='{$_SESSION['token']}'"
;
        
$bd->insertar_dato($sql);

        
// Cierra la sesion y regresa a pagina de inicio
        
session_destroy();
        
header"Location: index.php");
        break;

}

?>
Lo curioso es que al probarlo note que habia 2 registros en la base, el archivo original y la redireccion PERO AL ARCHIVO CORRECTO, es decir como si hubiera entrado correctamente el usuario

rastree el problema y me llevo a esta subrutina, si la dejo se insertan 2 entradas en la base (la incorrecta y la correcta) ... si la quito, se inserta solo una y lo mas curioso es que la rutina no tiene ABSOLUTAMENTE NADA QUE VER CON ESTE ARCHIVO, es una subrutina que se manda llamar en otros archivos completamente diferentes...

Código PHP:
// ***************************************************************************************
//        Limpiar_html.- Elimina el Cross Site Scripting
function limpiar_html($variable) {
    
$variable strip_tags(stripslashes(trim(rtrim($variable))));
    
$variable htmlspecialchars($variableENT_QUOTES);
    return 
$variable;

Me pueden ayudar a entender que puede estar pasando???
  #2 (permalink)  
Antiguo 16/12/2011, 21:25
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 9 meses
Puntos: 177
Respuesta: Llamada duplicada a header

estás seguro que $_SESSION['token'] tiene valor?
__________________
la la la
  #3 (permalink)  
Antiguo 16/12/2011, 21:50
Avatar de Chico3001  
Fecha de Ingreso: septiembre-2011
Ubicación: Mexico, DF
Mensajes: 112
Antigüedad: 13 años, 2 meses
Puntos: 12
Respuesta: Llamada duplicada a header

Ese es el punto... si no tiene valor es que el usuario no se ha registrado en el sistema o que su sesion expiro, por lo tanto se ingresa el error en la base de datos y se redirecciona de index2.php(el archivo que puse) a entrar.php para que entre de nuevo...

Pero lo curioso es que de index2.php el programa salta a stats.php (donde tambien hago la comprobacion del token) y de alli a entrar.php, y ambos datos aparecen en la base de datos

Si elimino la rutina de limpieza de cross scripting entonces todo funciona normalmente... si no hay token solo aparece una entrada en la base de datos (index2.php) y de alli se redirecciona a entrar.php
  #4 (permalink)  
Antiguo 16/12/2011, 23:38
Avatar de Chico3001  
Fecha de Ingreso: septiembre-2011
Ubicación: Mexico, DF
Mensajes: 112
Antigüedad: 13 años, 2 meses
Puntos: 12
Respuesta: Llamada duplicada a header

Provisionalmente lo resolvi añadiendo un die() al final de la rutina de seguridad, sin embargo no se si esto sea correcto

Código PHP:
if(!isset($_SESSION['token'])) {

    global 
$self;
    
$ipv4 sprintf("%u"ip2long(getenv('REMOTE_ADDR')));

    
// Guarda variables en la lista negra para analisis posterior
    
$bd=Db::getInstance();

    
$sql="INSERT INTO config_listanegra (ip,intento,usuario,clave)
        VALUES ('$ipv4','0','$self','null')"
;
    
$bd->insertar_dato($sql);

    
session_destroy();
    
header("Location: entrar.php");
    die();
    } 

Última edición por Chico3001; 17/12/2011 a las 11:27

Etiquetas: duplicada, header, html, llamada, registro, sql, tabla, variables, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:19.