Foros del Web » Programando para Internet » PHP »

Error en sesions con header

Estas en el tema de Error en sesions con header en el foro de PHP en Foros del Web. Hola a tod@s: Estoy tratando de hacer un sistema en donde existe una zona exclusiva y debo de crear sesiones y estoy usando este ejemplo ...
  #1 (permalink)  
Antiguo 27/03/2007, 01:55
Avatar de El Cipote  
Fecha de Ingreso: febrero-2006
Mensajes: 213
Antigüedad: 18 años, 2 meses
Puntos: 2
Pregunta Error en sesions con header

Hola a tod@s:

Estoy tratando de hacer un sistema en donde existe una zona exclusiva y debo de crear sesiones y estoy usando este ejemplo encontrado en internethttp://blog.aoyama.com.mx/index.php/...uarios-en-php/ pero me da un error raro que no entiendo especificamente en el index.php este es el error:

Cita:
Warning: Cannot modify header information - headers already sent by (output started at C:\htdocs\jel01\index.php...
Cual sera la falla, ya que los demas script funcionan correctamente.
  #2 (permalink)  
Antiguo 27/03/2007, 02:56
Avatar de kennyhp  
Fecha de Ingreso: julio-2006
Mensajes: 370
Antigüedad: 17 años, 9 meses
Puntos: 5
Re: Error en sesions con header

He mirado un poco el código de esa web, tu problema parece que esta con las redirecciones header, pero deverias poner tu código para ver por donde anda el error.

Saludos!
  #3 (permalink)  
Antiguo 27/03/2007, 08:49
Avatar de El Cipote  
Fecha de Ingreso: febrero-2006
Mensajes: 213
Antigüedad: 18 años, 2 meses
Puntos: 2
Exclamación Re: Error en sesions con header

Ok, aqui esta el codigo:
pagina index.php
Código PHP:
<?
session_start
();
require_once(
"scripts/conectar.php"); 
?>
<html>
<form method="post" action="index.php">
        <table cellpadding="2" cellspacing="2" width="80%" class="tabla">
            <tr>
                <td class="celda">Usuario:</td>
                <td class="celda"><input type="text" size="20" maxlength="255" name="login" /></td>
            </tr>
            <tr>
                <td class="celda">Clave:</td>
                <td class="celda"><input type="password" size="20" maxlength="255" name="clave" /></td>
            </tr>
            <tr>
                <td class="celda" colspan="2"><input type="submit" value="Ingresar" /></td>
            </tr>
        </table>
        </form> 
<? if(isset($_POST["login"])) // Si existe el login, es decir si ya presionamos el botón del formulario
    
{
        require_once(
"scripts/validar.php"); // Tomamos el archivo valida.php y lo ejecutamos
    
}
    if(isset(
$_SESSION["nivel"]))
    {        
        
//Si existe el nivel, quiere decir que la consulta fue éxitosa y obtuvo resultados  
ob_start(); // Esto evita el error de envío de cabeceras clásico
header ("Location: pag.php"); // Redireccionamos
ob_end_flush(); //Ya sabemos que hace esto último ...  
     
}
    else
    { 
?>
</html>
<?
    
}         

?>
este en una pagina pag.php
Código PHP:
<? session_start(); // Iniciamos sesión
// Verificamos que existan el login y el nivel en la sesión
if(isset($_SESSION["nivel"]) && isset($_SESSION["login"]))
{
echo 
"Zona Exclusiva para socios...";
echo 
"<a href=\"salir.php\"> Cerrar Sesion</a>";  // Ahora lo redireccionamos hacia la página que queramos
    /* Aquí va lo que queremos que vea el usuario que se ha autenticado
        sobra decir que si estamos manejando niveles, pues aquí se debería hacer la validación
        según los niveles que se haya establecido, un switch podría servir de mucha utilidad si hay
        diversidad de niveles, por ejemplo */
}
else 
// Si el usuario no es válido, cerro la sesión, etc...
{
ob_start(); // Ya sabemos que hace esto  
header ("Location: index.php"); // Lo mandamos al index.php de regreso
ob_end_flush();  // Ya sabemos que hace esto  
}; 
?>
este codigo en una pagina salir.php
Código PHP:
<?php
    session_start
(); // Iniciamos sesión
    
unset($_SESSION['nivel']); //Destruimos nivel
    
unset($_SESSION['login']); // Destruimos login
    
ob_start(); // Esto evita el error de envío de cabeceras clásico
    
header ("Location: index.php"); // Redireccionamos al index.php
    
ob_end_flush(); //Ya sabemos que hace esto último ...  
?>
este codigo en una pagina validar.php
Código PHP:
<?
session_start
(); // Iniciamos la sesión
    
$enlace Conectar(); // Nos conectamos a la base de datos
        /* Está variable, la usaremos para revisar si los datos está correctos, es decir, si nunca cambia de valor, quiere decir que no hubo ningún error, no es necesario hacerlo así, pero yo he encontrado que de está manera me evito muchos inconvenientes */
    
$valida true
        
/* reviso si el campo login se encuentra vacío, se puede probar con la función empty($variable) */
    
if(strlen(trim($_POST["login"]))==0
    {
        
$valida false//Obviamente si lo está cambio mi variable
        
echo "<p><strong>No deje vacío el login, por favor</strong></p>";
    }
        
// Ahora hago lo mismo con la clave
    
if(strlen(trim($_POST["clave"]))==0)
    {
        
$valida false;
        echo 
"<p><strong>No deje vacía la clave, por favor</strong></p>";
    }
    if(
$valida//si $valida nunca cambio, quiere decir que no quedo ningún campo vacío
    
{
                
/* genero el sql necesario para buscar el usuario, la función md5, utiliza el algoritmo <strong>md5</strong> para encriptar las contraseñas, es una práctica obligatoria para almacenar contraseñas el usar un método de encriptación */
        
$sqlVU "select login, clave, nivel from ws_usuarios where login = '$_POST[login]' and clave = '" md5($_POST["clave"]) . "'";
        
$resVU mysql_query($sqlVU$enlace); //ejecuto la consulta y la guardo en un resource
        
$numVU mysql_num_rows($resVU); // Verifico si hubo resultados
        
if($numVU==0// si no hubo resultados, mando un error
        
{
            echo 
"<p>Los datos proporcionados no son correctos</p>";
        }
        else 
// Por el contrario si hubo resultados
        
{
                        
// capturo los resultados en un array unidimensional
            
$rowVU mysql_fetch_row($resVU); 
                       
// Y creo las variables de sesión login y nivel que me serviran para el resto de mis aplicaciones
            
$_SESSION["login"] = $rowVU[0]; 
            
$_SESSION["nivel"] = $rowVU[2];
        }
    } 
?>
Espero que ahora este mas claro....
  #4 (permalink)  
Antiguo 27/03/2007, 11:40
Avatar de El Cipote  
Fecha de Ingreso: febrero-2006
Mensajes: 213
Antigüedad: 18 años, 2 meses
Puntos: 2
Re: Error en sesions con header

YA, lo solucion. Bien dicen que "El querer es poder"
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 13:01.