Foros del Web » Programando para Internet » PHP »

Problema con sesiones

Estas en el tema de Problema con sesiones en el foro de PHP en Foros del Web. Buenos dias a todos!! Tengo una página de login que lo que hace es mirar en la base de datos si hay algún registro que ...
  #1 (permalink)  
Antiguo 17/06/2008, 04:56
 
Fecha de Ingreso: septiembre-2007
Mensajes: 100
Antigüedad: 16 años, 7 meses
Puntos: 0
Problema con sesiones

Buenos dias a todos!!

Tengo una página de login que lo que hace es mirar en la base de datos si hay algún registro que coincida con los datos introducidos por el usuario y si hay alguno quiero que se cree una sesión para guardar sus datos.

Sé que la consulta se hace bien porque he probado a mostrar el resultado por pantalla y se muestra correctamente. Mi problema es que siempre me da un error en la línea session_start() y no sé porque. He estado buscando por el foro y veo que muchos ejemplos están hechos como yo lo tengo y dicen que les funciona.

Os pongo el código a ver si alguien me puede ayudar y sabe donde está mi error.

Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Identificación de usuarios</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <meta name="verify-v1" content="7uiD5QdUtd0j14COc+V8QRQHTsLmS+qE5PWC/+OaSYQ=" />
    <meta name="description" content="Identificación de usuarios">
    <meta name="keywords" content="identificación, usuarios">
    <meta name="revisit" content="1 semana">
    <link href="estilo.css" type="text/css" rel="stylesheet" />
    <script language="javascript" src="popup.js"></script>
    <meta content="MSHTML 6.00.2800.1400" name="GENERATOR" />
    <style type="text/css">
        body 
        {
            margin-left: 10px;
            margin-top: 10px;
        }
    </style>
</head>

<?php
    $primeravez 
FALSE;
    if (empty(
$_POST["botEnviar"]))
    {
        
$primeravez TRUE;
        
$_POST["email"] = "";
        
$_POST["contrasena"] = "";
    }
?>

<body bgcolor="#F5F5F5" topmargin="10">
    <table width="836" cellpadding="0" cellspacing="0" border="0">
        <tr>
            <td colspan="2" width="836" height="30" bgcolor="#FFFFFF">Para poder acceder a su cuenta de usuario, debe identificarse. Si no está registrado, hagalo pulsando <a href="registro.php">aquí</a>.</td>
        </tr>
        <tr>
            <td colspan="2" width="836" height="8" bgcolor="#FFFFFF"></td>
        </tr>
    <form name="login" method="post" action="login.php">
        <tr>
            <td width="100" bgcolor="#FFFFFF">Email *:</td>
              <td width="736" bgcolor="#FFFFFF"><input name="email" type="text" id="email" value="<?php echo $_POST['email']; ?>" size="40" style="background-color:#F5F5F5" /></td>
        </tr>
        <?php
            
if (!$primeravez)
            {
                if (empty(
$_POST["email"]))
                    echo 
"<tr><td colspan=\"2\" width=\"836\" height=\"25\" bgcolor=\"#FFFFFF\" style=\"color:#FF0000; font-size:14px\">¡Tiene que introducir su email!</td></tr>";
                elseif (!
eregi("^[a-zA-Z0-9_\-\.]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9_\-\.]+$"$_POST["email"]))
                    echo 
"<tr><td colspan=\"2\" width=\"836\" height=\"25\" bgcolor=\"#FFFFFF\" style=\"color:#FF0000; font-size:14px\">¡Email no válido!</td></tr>";
                else
                    
$email htmlspecialchars($_POST["email"]);
            }
        
?>
        <tr>
            <td colspan="2" height="8" bgcolor="#FFFFFF"></td>
        </tr>
        <tr>
            <td width="100" bgcolor="#FFFFFF">Contraseña *:</td>
              <td width="736" bgcolor="#FFFFFF"><input name="contrasena" type="password" id="contrasena" value="<?php echo $_POST['contrasena']; ?>" size="40" style="background-color:#F5F5F5" /></td>
        </tr>
        <?php
            
if (empty($_POST["contrasena"]) && (!$primeravez))
                echo 
"<tr><td colspan=\"2\" width=\"836\" height=\"25\" bgcolor=\"#FFFFFF\" style=\"color:#FF0000; font-size:14px\">¡Tiene que introducir su contraseña!</td></tr>";
            else
                
$contrasena htmlspecialchars($_POST["contrasena"]);
        
?>
        <tr>
            <td colspan="2" width="836" height="8" bgcolor="#FFFFFF"></td>
        </tr>
        <tr>
              <td colspan="2" width="836" bgcolor="#FFFFFF" align="center"><input name="botEnviar" type="submit" id="botEnviar" value="Enviar" style="width:100px; cursor:pointer" /></td>
        </tr>
    </form>
    <?php
        
if ((!$primeravez) && isset($email) && isset($contrasena))
        {
            require_once(
"conexion.inc.php");
            
$conexion mysql_connect($servidor$usuario$passwd);
            
$db mysql_select_db($basedatos$conexion);
            if (!
$conexion)
            {
                echo 
"Error al establecer la conexión con la base de datos: " mysql_error();
                exit();
            }
            if (!
$db)
            {
                echo 
"Error seleccionando la base de datos: " mysql_error();
                exit();
            }
            
$resultado mysql_query("SELECT id_cliente FROM clientes WHERE email = '$email' AND contrasena = '$contrasena'"$conexion);
            if (
mysql_num_rows($resultado) > 0)
            {
                
$fila mysql_fetch_array($resultado);
                
session_start();
                
$_SESSION["usuario"] = $fila["id_cliente"];
                
$_SESSION["logged"] = TRUE;
                echo 
"<tr><td colspan=\"2\" width=\"836\" height=\"15\" bgcolor=\"#FFFFFF\"></td></tr><tr><td colspan=\"2\" width=\"836\" heigth=\"25\" bgcolor=\"#FFFFFF\" align=\"center\" style=\"color:#33CC00; font-size:14px\">Identificación realizada con éxito.</td></tr>";
            }
            else
            {
                echo 
"<tr><td colspan=\"2\" width=\"836\" height=\"15\" bgcolor=\"#FFFFFF\"></td></tr><tr><td colspan=\"2\" width=\"836\" heigth=\"25\" bgcolor=\"#FFFFFF\" align=\"center\" style=\"color:#FF0000; font-size:14px\">¡Usuario o contraseña incorrectos!</td></tr>";
            }
            
mysql_free_result($resultado);
            
mysql_close($conexion);
        }
    
?>
    </table>
</body>
</html>
El error que me da es:

Cita:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\Janire\login.php:7) in C:\Janire\login.php on line 75

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\Janire\login.php:7) in C:\Janire\login.php on line 75
Pero a pesar de darme el error me pone que la identificación se ha realizado con éxito.

¿Alguien sabe por que me da este problema?

Muchas gracias de antemano.
  #2 (permalink)  
Antiguo 17/06/2008, 05:46
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Respuesta: Problema con sesiones

Estas poniendo el session_start() en un bucle... trata poniendolo como la primera linea de codigo antes del html.

Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #3 (permalink)  
Antiguo 17/06/2008, 07:44
Avatar de almarin  
Fecha de Ingreso: junio-2008
Mensajes: 44
Antigüedad: 15 años, 10 meses
Puntos: 4
Respuesta: Problema con sesiones

Como dice Marvin, hay que poner el session_start() antes de que se emita la primera línea de HTML.

Piensa que cualquier código html fuera de las etiquetas <?php ?> se manda directamente al cliente. en cuanto se manda el primer bit, las cabeceras también se mandan con él. Como las sesiones, por defecto, se gestionan a base de cookies, y éstas van incrustadas en las cabeceras, siempre que no pongas el session_start antes de cualquier salida te emitirá el mismo warning.

Saludos.
  #4 (permalink)  
Antiguo 17/06/2008, 07:44
Avatar de carlosmbrizuela  
Fecha de Ingreso: enero-2007
Ubicación: La Plata (Argentina)
Mensajes: 490
Antigüedad: 17 años, 3 meses
Puntos: 1
Respuesta: Problema con sesiones

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Identificación de usuarios</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="verify-v1" content="7uiD5QdUtd0j14COc+V8QRQHTsLmS+qE5PWC/+OaSYQ=" />
<meta name="description" content="Identificación de usuarios">
<meta name="keywords" content="identificación, usuarios">
<meta name="revisit" content="1 semana">
<link href="estilo.css" type="text/css" rel="stylesheet" />
<script language="javascript" src="popup.js"></script>
<meta content="MSHTML 6.00.2800.1400" name="GENERATOR" />
<style type="text/css">
body
{
margin-left: 10px;
margin-top: 10px;
}
</style>
</head>

<?php
session_start();
$primeravez = FALSE;
if (empty(
$_POST["botEnviar"]))
{
$primeravez = TRUE;
$_POST["email"] = "";
$_POST["contrasena"] = "";
}
?>

<body bgcolor="#F5F5F5" topmargin="10">
<table width="836" cellpadding="0" cellspacing="0" border="0">
<tr>
<td colspan="2" width="836" height="30" bgcolor="#FFFFFF">Para poder acceder a su cuenta de usuario, debe identificarse. Si no está registrado, hagalo pulsando <a href="registro.php">aquí</a>.</td>
</tr>
<tr>
<td colspan="2" width="836" height="8" bgcolor="#FFFFFF"></td>
</tr>
<form name="login" method="post" action="login.php">
<tr>
<td width="100" bgcolor="#FFFFFF">Email *:</td>
<td width="736" bgcolor="#FFFFFF"><input name="email" type="text" id="email" value="<?php echo $_POST['email']; ?>" size="40" style="background-color:#F5F5F5" /></td>
</tr>
<?php
if (!$primeravez)
{
if (empty(
$_POST["email"]))
echo
"<tr><td colspan=\"2\" width=\"836\" height=\"25\" bgcolor=\"#FFFFFF\" style=\"color:#FF0000; font-size:14px\">¡Tiene que introducir su email!</td></tr>";
elseif (!
eregi("^[a-zA-Z0-9_\-\.]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9_\-\.]+$", $_POST["email"]))
echo
"<tr><td colspan=\"2\" width=\"836\" height=\"25\" bgcolor=\"#FFFFFF\" style=\"color:#FF0000; font-size:14px\">¡Email no válido!</td></tr>";
else
$email = htmlspecialchars($_POST["email"]);
}
?>
<tr>
<td colspan="2" height="8" bgcolor="#FFFFFF"></td>
</tr>
<tr>
<td width="100" bgcolor="#FFFFFF">Contraseña *:</td>
<td width="736" bgcolor="#FFFFFF"><input name="contrasena" type="password" id="contrasena" value="<?php echo $_POST['contrasena']; ?>" size="40" style="background-color:#F5F5F5" /></td>
</tr>
<?php
if (empty($_POST["contrasena"]) && (!$primeravez))
echo
"<tr><td colspan=\"2\" width=\"836\" height=\"25\" bgcolor=\"#FFFFFF\" style=\"color:#FF0000; font-size:14px\">¡Tiene que introducir su contraseña!</td></tr>";
else
$contrasena = htmlspecialchars($_POST["contrasena"]);
?>
<tr>
<td colspan="2" width="836" height="8" bgcolor="#FFFFFF"></td>
</tr>
<tr>
<td colspan="2" width="836" bgcolor="#FFFFFF" align="center"><input name="botEnviar" type="submit" id="botEnviar" value="Enviar" style="width:100px; cursor:pointer" /></td>
</tr>
</form>
<?php
if ((!$primeravez) && isset($email) && isset($contrasena))
{
require_once(
"conexion.inc.php");
$conexion = mysql_connect($servidor, $usuario, $passwd);
$db = mysql_select_db($basedatos, $conexion);
if (!
$conexion)
{
echo
"Error al establecer la conexión con la base de datos: " . mysql_error();
exit();
}
if (!
$db)
{
echo
"Error seleccionando la base de datos: " . mysql_error();
exit();
}
$resultado = mysql_query("SELECT id_cliente FROM clientes WHERE email = '$email' AND contrasena = '$contrasena'", $conexion);
if (
mysql_num_rows($resultado) > 0)
{
$fila = mysql_fetch_array($resultado);

$_SESSION["usuario"] = $fila["id_cliente"];
$_SESSION["logged"] = TRUE;
echo
"<tr><td colspan=\"2\" width=\"836\" height=\"15\" bgcolor=\"#FFFFFF\"></td></tr><tr><td colspan=\"2\" width=\"836\" heigth=\"25\" bgcolor=\"#FFFFFF\" align=\"center\" style=\"color:#33CC00; font-size:14px\">Identificación realizada con éxito.</td></tr>";
}
else
{
echo
"<tr><td colspan=\"2\" width=\"836\" height=\"15\" bgcolor=\"#FFFFFF\"></td></tr><tr><td colspan=\"2\" width=\"836\" heigth=\"25\" bgcolor=\"#FFFFFF\" align=\"center\" style=\"color:#FF0000; font-size:14px\">¡Usuario o contraseña incorrectos!</td></tr>";
}
mysql_free_result($resultado);
mysql_close($conexion);
}
?>
</table>
</body>
</html>
__________________
http://www.rollermountain.com
  #5 (permalink)  
Antiguo 17/06/2008, 07:59
 
Fecha de Ingreso: septiembre-2007
Mensajes: 100
Antigüedad: 16 años, 7 meses
Puntos: 0
Respuesta: Problema con sesiones

Lo he puesto al inicio del todo de la página y ahora va perfecto.

He probado también como me decía carlosmbrizuela pero no me funcionaba y me seguía dando el mismo error.

Muchas gracias a todos por vuestro tiempo!!
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 14:03.