Foros del Web » Programando para Internet » PHP »

Funciona en Firefox pero da Error de Headers con Iexplorer

Estas en el tema de Funciona en Firefox pero da Error de Headers con Iexplorer en el foro de PHP en Foros del Web. Que tal, Les cuento que tengo una página principal que muestra unos datos, y para editar la información abro una ventanita nueva "hija" que al ...
  #1 (permalink)  
Antiguo 07/10/2005, 09:32
 
Fecha de Ingreso: octubre-2005
Mensajes: 365
Antigüedad: 18 años, 6 meses
Puntos: 0
Funciona en Firefox pero da Error de Headers con Iexplorer

Que tal,

Les cuento que tengo una página principal que muestra unos datos, y para editar la información abro una ventanita nueva "hija" que al guardar los datos refresca la ventana madre.

Lo he probado en Firefox Y funciona de Maravilla, pero lo probé en Iexplorer y me devuel errores de cabecera, hos explico la estructura de esta página de edición


Código PHP:
<?php require_once('conexion.php'); ?>//conexion a BD
<?php require("nivel_de_acceso.inc.php"); ?>//Codigo de Sesiones
Código PHP:
<?php Código de Update de BD ?>

Algunos Javascripts para validar la entrada de datos
Html con el formulario de Actualización

<?php Mysql_free_result... ?>

Yo sé que los errores de Headers es por enviar información o espacios en blanco antes del header, pero ya lo he verificado.

El Error que me sale es:


Código PHP:
NoticeUndefined indexHTTP_REFERER in aut_verifica.inc.php on line 3

Notice
Undefined indexHTTP_REFERER in aut_verifica.inc.php on line 6

Warning
Cannot modify header information headers already sent by (output started at aut_verifica.inc.php:3in aut_verifica.inc.php on line 7 

Donde marca los errores aut_verifica_inc.php es un archvo que es llamado por nivel_acceso_inc.php que tengo arriba y controla las sesiones (Utilizo Autentificator de Cluster )

En las líneas de error tiene este código:




Que Puede ser?

Por qué va de Maravilla en Firefox y no me funciona en Iexplorer?
Como lo Soluciono?

Gracias de Antemano.
  #2 (permalink)  
Antiguo 07/10/2005, 15:19
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Algunos navegadores no informan de la variable "HTTP_REFERER" (página referida) cuando te mueves por ventanas de tu aplicación (vas abriendo con javascript ventanas: window.open .. etc)

Puedes prescindir de esa porción del código original de Autentificator que valida de que página viene para implementar la funcionalidad de "devolver los mensajes de error a la página que los originó" (normalmente el formulario de login que se usó). Para nada afecta a la seguridad de tus scripts .. es sólo una "funcionalidad" que implementé en su tiempo (cuando desconocía sobre los problemas de HTTP_REFERER) para hacer de cierta forma más versatil a "Autentificator" y no depender de -una- sóla página o formulario de login.

Quita el if() implicado (del HTTP_REFERER) y fija el valor de $redir al URL donde tengas tu formulario de login o página donde indiques que hay un error al ingresar a las "malas".

Un saludo,
  #3 (permalink)  
Antiguo 07/10/2005, 15:45
 
Fecha de Ingreso: octubre-2005
Mensajes: 365
Antigüedad: 18 años, 6 meses
Puntos: 0
Muchas Gracias por contestar, ya he desactivado el codigo así:



Ahora lo segundo de fijar el valor de $redir al URL donde tengas tu formulario de login.

No lo capté muy bien... Entonces sale este Notice:

Código PHP:
NoticeA session had already been started ignoring session_start() in c:wwwaut_verifica.inc.php on line 99 

Muchisimas Gracias Master

Última edición por SOFIA_ME_GUSTA; 12/10/2005 a las 08:41
  #4 (permalink)  
Antiguo 07/10/2005, 15:49
 
Fecha de Ingreso: octubre-2005
Mensajes: 365
Antigüedad: 18 años, 6 meses
Puntos: 0
MMMMMMMMmmmm ya lo acabo de arreglar Cluster, es que había movido los requires en un par de páginas. Ya funciona a la perfección.
  #5 (permalink)  
Antiguo 12/10/2005, 08:40
 
Fecha de Ingreso: octubre-2005
Mensajes: 365
Antigüedad: 18 años, 6 meses
Puntos: 0
Tiene otro detalle, al comprobar el login y el password, si coloco un password/login incorrectos ya no aparece el mensaje sino que muestra este error:

Código PHP:
NoticeUndefined variableredir in c:wwwaut_verifica.inc.php on line 90

Warning
Cannot modify header information headers already sent by (output started at c:wwwaut_verifica.inc.php:90in c:wwwaut_verifica.inc.php on line 90 
Supongo que es lo del redir que mencionar, pero no sé como arreglarlo:





Gracias de Antemano.
  #6 (permalink)  
Antiguo 12/10/2005, 09:13
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pon el código completo como quedó (no hace falta que sea un "screen shot" .. pega el código aquí ..)

En principio .. los "notice" te avisan de que en ese instante no están definidas variables ..

Puedes hacer validaciones tipo:
Código PHP:
if (isset($redir)){
// usas $redir ..si está definida

También sucederá con las variables externas como $_GET .. $_POST .. etc. (sobre todo en "aut_gestion_usuarios.php" que no tuve encuenta eso).

Realmente se debería programar así .. (validando la existencia de una variable sobre todo externa antes de pretender hacer algo con ella) .. Pero, también puedes ocultar esos "notice" para que no se muestren usando:

error_reporting() a un nivel más bajo de aviso de problemas.

Un saludo,
  #7 (permalink)  
Antiguo 12/10/2005, 09:20
 
Fecha de Ingreso: octubre-2005
Mensajes: 365
Antigüedad: 18 años, 6 meses
Puntos: 0
Ok, Gracias por contestar :

Código PHP:
<?
require ("aut_config.inc.php");// Cargar datos conexion y otras variables.
/*$url = explode("?",$_SERVER['HTTP_REFERER']);// chequear página que lo llama para devolver errores a dicha página.
$pag_referida=$url[0];
$redir=$pag_referida;
if ($_SERVER['HTTP_REFERER'] == ""){// chequear si se llama directo al script.
header("location: http://www.google.com");
exit;
}*/
// Chequeamos si se está autentificandose un usuario por medio del formulario
if (isset($_POST['user']) && isset($_POST['pass'])) {
// Conexión base de datos.
// si no se puede conectar a la BD salimos del scrip con error 0 y
// redireccionamos a la pagina de error.
$db_conexionmysql_connect("$sql_host""$sql_usuario""$sql_pass") or die(header ("Location:  $redir?error_login=0"));
mysql_select_db("$sql_db");
// realizamos la consulta a la BD para chequear datos del Usuario.
$usuario_consulta mysql_query("SELECT * FROM $sql_tabla WHERE usuario='".$_POST['user']."'") or die(header ("Location:  $redir?error_login=1"));
 
// miramos el total de resultado de la consulta (si es distinto de 0 es que existe el usuario)
 
if (mysql_num_rows($usuario_consulta) != 0) {
    
// eliminamos barras invertidas y dobles en sencillas
    
$login stripslashes($_POST['user']);
    
// encriptamos el password en formato md5 irreversible.
    
$password = ($_POST['pass']);

    
// almacenamos datos del Usuario en un array para empezar a chequear.
     
$usuario_datos mysql_fetch_array($usuario_consulta);
  
    
// liberamos la memoria usada por la consulta, ya que tenemos estos datos en el Array.
    
mysql_free_result($usuario_consulta);
    
// cerramos la Base de dtos.
    
mysql_close($db_conexion);
    
    
// chequeamos el nombre del usuario otra vez contrastandolo con la BD
    // esta vez sin barras invertidas, etc ...
    // si no es correcto, salimos del script con error 4 y redireccionamos a la
    // página de error.
    
if ($login != $usuario_datos['usuario']) {
           
Header ("Location: $redir?error_login=4");
        exit;}

    
// si el password no es correcto ..
    // salimos del script con error 3 y redireccinamos hacia la página de error
    
if ($password != $usuario_datos['pass']) {
        
Header ("Location: $redir?error_login=3");
        exit;}

    
// Paranoia: destruimos las variables login y password usadas
    
unset($login);
    unset (
$password);

    
// En este punto, el usuario ya esta validado.
    // Grabamos los datos del usuario en una sesion.
    
     // le damos un mobre a la sesion.
    
session_name($usuarios_sesion);
     
// incia sessiones
    
session_start();

    
// Paranoia: decimos al navegador que no "cachee" esta página.
    
session_cache_limiter('nocache,private');
    
    
// Asignamos variables de sesión con datos del Usuario para el uso en el
    // resto de páginas autentificadas.

    // definimos usuarios_id como IDentificador del usuario en nuestra BD de usuarios
    
$_SESSION['usuario_id']=$usuario_datos['id'];
    
    
// definimos usuario_nivel con el Nivel de acceso del usuario de nuestra BD de usuarios
    
$_SESSION['usuario_nivel']=$usuario_datos['nivel_acceso'];
    
    
//definimos usuario_nivel con el Nivel de acceso del usuario de nuestra BD de usuarios
    
$_SESSION['usuario_login']=$usuario_datos['usuario'];

    
//definimos usuario_password con el password del usuario de la sesión actual (formato md5 encriptado)
    
$_SESSION['usuario_password']=$usuario_datos['pass'];
    
     
$_SESSION['usuario_name']=$usuario_datos['name'];


    
// Hacemos una llamada a si mismo (scritp) para que queden disponibles
    // las variables de session en el array asociado $HTTP_...
    
$pag=$_SERVER['PHP_SELF'];
    
Header ("Location: $pag?");
    exit;
    
   } else {
      
// si no esta el nombre de usuario en la BD o el password ..
      // se devuelve a pagina q lo llamo con error
      
Header ("Location: $redir?error_login=2");
      exit;}
} else {

// -------- Chequear sesión existe -------

// usamos la sesion de nombre definido.
session_name($usuarios_sesion);
// Iniciamos el uso de sesiones
session_start();

// Chequeamos si estan creadas las variables de sesión de identificación del usuario,
// El caso mas comun es el de una vez "matado" la sesion se intenta volver hacia atras
// con el navegador.

if (!isset($_SESSION['usuario_login']) && !isset($_SESSION['usuario_password'])){
// Borramos la sesion creada por el inicio de session anterior
session_destroy();
header("location: http://www.google.com");
exit;
}
}
?>
  #8 (permalink)  
Antiguo 12/10/2005, 11:03
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Como te mencioné más arriba . .debes definir un valor para $redir de un URL .. el que tengas tu formulario de login donde pidas tu usuario/password ..

Hazlo donde está actualmente dicho código .. Si quieres puedes hasta meterlo en aut_config.inc.php:

$redir="http://www.tusitio.com/formulario_login.php";

Un saludo,
  #9 (permalink)  
Antiguo 12/10/2005, 12:06
 
Fecha de Ingreso: octubre-2005
Mensajes: 365
Antigüedad: 18 años, 6 meses
Puntos: 0
Ok, arreglado. Que manera de dar lata la mia no???

Es que quiero simpre consultar todo para no dañar la seguridad del script.

Saludos.
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 20:09.