Foros del Web » Programando para Internet » PHP »

Problema cookies

Estas en el tema de Problema cookies en el foro de PHP en Foros del Web. Hola!! Pues veran, tengo un problema con las cookies ke intento enviar para mantener a un usuario conectado. Leyendo un tutorial de maestrosdelweb.com sobre sistemas ...
  #1 (permalink)  
Antiguo 06/06/2007, 08:26
 
Fecha de Ingreso: junio-2007
Mensajes: 41
Antigüedad: 16 años, 11 meses
Puntos: 0
Problema cookies

Hola!! Pues veran, tengo un problema con las cookies ke intento enviar para mantener a un usuario conectado.

Leyendo un tutorial de maestrosdelweb.com sobre sistemas de usuarios en php exactamente en maestrosdelweb /editorial/phpreusr

Veo que hace un setcookie cuando comprueba si el usuario es correcto o no.
Guiandome por eso lo que yo hago es primero al principio del todo antes de cualkier etiketa html incluyo un archivo php que lo que hace es comprobar si existen las cookies y si existen cojer el usuario como hace en el tutorial

Pero el problema me viene cuando alguien va a ingresar o loguearse. Lo que hago es un archivo php que si una variable del anterior archivo esta a 1 aparece simplemente un Bienvenido y el nombre del usuario pero si esta a 0 aparece un formulario para loguearse, Cuando se loguea alguien compruebo su nombre, su contraseña y si es correcto hago un setcookie y he aki el problema ke me da con esto

Warning: Cannot modify header information - headers already sent by (output started at...

El warning me lo da en la linea del setcookie y debe ser xq no lo pongo delante de cualkier html, pero segun el tutorial tampoco lo hace delante, si no en una funcion aparte ke es llamada por el formulario.

Bien, Kreo ke la solucion seria hacer como el tutorial y llamar desde el formulario a una funcion aparte, pero lo que hago yo es esto

<?php
if($logueado)
{
echo'<span class="Letra">Bienvenido'.$cuser.'</span>';
}
else
{
if(!$_POST['login'])
{
include('loguear.php');
}
else
{
require('conex.php');
$usuario=trim($_POST['usuario']);
$passw=trim($_POST['passw']);
$consulta="select usuario from usuarios where usuario='$usuario' and password='$passw'";
$sql=mysql_query($consulta);
$num=mysql_num_rows($sql);
if($num==1)
{
if($row=mysql_fetch_row($sql))
{
$luser=$row;
$logueado=1;
setcookie("cuser",$usuario,time()+60*60*24*7);
setcookie("cpassw",$passw,time()+60*60*24*7);
}
mysql_free_result($sql);
}
else
{
include('loguear.php');
echo'<span class="Error" style="font-size:10px;">Usuario o Contraseña incorrecta <a href="olvido.php">¿¿olvidaste tu contraseña??</a></span>';
}
}
}

?>

donde logueado es la variable del primer archivo ke komprueba si estan las cookies o no.
Si no estan hace un if si ha pulsado el boton de login o no. Si no lo ha pulsado
aparece el formulario ke es loguear.php(aunke es todo html) y si lo ha pulsado comprueba nick, contraseña y si es correcto todo hace el setcookie y pone a 1 la variable logueado para que aparezca el mensaje de bienvenida si no es correcto aparece el formulario y un mensaje de error debajo.

El formulario es este
<span class="Letra">
<form method="post" name="login">
Usuario
<input name="usuario" type="text" class="Caja" maxlength="20">
Contraseña
<input name="passw" type="password" class="Caja" maxlength="12">
<input name="login" type="submit" class="Letra" value="Login">
</form>
</span>

La razon para que el formulario no tenga accion y no llame a ninguna funcion es para ke siempre me aparezca la misma pagina principal y solo cambie esta parte de la pagina la de este script, y por eso compruebo lo del boton de login en vez de llamar a una accion con el formulario.

La cuestion es entonces como hago para que no me de el error en el setcookie sin tener ke llamar a otra funcion y x lo tanto ke aparezca otra pagina ke no sea la principal donde se encuentra el script.

Despues de todo este rollo no se si me explicado bien, de todas formas Gracias de antemano.
  #2 (permalink)  
Antiguo 06/06/2007, 13:24
 
Fecha de Ingreso: junio-2007
Mensajes: 41
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Problema cookies

Por favor alguien ha entendido el problema?? xq yo me explico muy mal!! jeje
  #3 (permalink)  
Antiguo 06/06/2007, 14:35
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Problema cookies

Ese error te sale porque haz enviado algo de HTML antes, por eso te marca ese warning, lo que vas a tener que haces es si quieres conservar esa estructura es hasta al principio de la pagina poner:
Código PHP:
<?php ob_start(); ?>
Al final de la pagina:
Código PHP:
<?php ob_end_flush(); ?>
Asi podras enviar tus cabeceras sin problema.
  #4 (permalink)  
Antiguo 06/06/2007, 15:29
 
Fecha de Ingreso: junio-2007
Mensajes: 41
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Problema cookies

Gracias, pero me puedes explicar para ke sirve poner eso??

He solucionado el problema haciendo ke kuando el formulario envie, la pagina se refresca y entonces a la vez ke compruebo si las cookies existen compruebo tambien si el login ha sido bueno y cambio otra variable a 1.

Entonces en el lado donde esta el formulario, pongo un if si el login ha sido bueno pone el bienvenido, y si las cookies existen tambien pero si el login ha sido malo vuelve a poner el formulario y un error.

el codigo nuevo de la parte del formulario
<?php
if($logueado || $logcorrecto)
{
if(!$_POST['logout'])
{
echo'<center class="Letra">
<form name="form1" method="post" action="">
<span class="Letra">Bienvenido'.$cuser .'</span>
<input class="Caja" style="width:auto;" name="logout" type="submit" value="Desconectar">
</form>
</center>';
}
}
else
{
if($_POST['login'] && (!$logcorrecto))
{
include('form_log.php');
echo'<span class="Error" style="font-size:10px;">Usuario o Contraseña incorrecta <a href="olvido.php">¿¿olvidaste tu contraseña??</a></span>';

}
else
include('form_log.php');
}

?>

y el codigo de las comprobaciones ke hago al iniciar la pagina, antes de ninguna parte de html

Compruebo ke ha intentado un login y si es bueno logcorrecto=1
<?php
$logcorrecto=0;
if($_POST['login'])
{
require('conex.php');
$usuario=trim($_POST['usuario']);
$passw=trim($_POST['passw']);
$consulta="select usuario from usuarios where usuario='$usuario' and password='$passw'";
$sql=mysql_query($consulta);
$num=mysql_num_rows($sql);
if($num==1)
{
if($row=mysql_fetch_row($sql))
{
$logcorrecto=1;
}
mysql_free_result($sql);
}
}
if($_POST['logout'])
$logout=1;
?>


Compruebo ke las cookies ya existen o si el login ha sido bueno para krearlas
<?php
$logueado;
$cuser;
$cpassw;
if(isset($HTTP_COOKIE_VARS['cuser']) && isset($HTTP_COOKIE_VARS['cpassw']))
{
$cuser=$HTTP_COOKIE_VARS['cuser'];
$cpassw=$HTTP_COOKIE_VARS['cpassw'];
$select="select usuario,password from usuarios where usuario='$cuser' and password='$cpassw'";
$sql=mysql_query($select);
$num=mysql_num_rows;
if($num==1)
{
if($datos=mysql_fetch_array($sql))
{
$cuser=$datos['usuario'];
$cpassw=$datos['password'];
setcookie('cuser',$cuser,time()+60*60*24*7);
setcookie('cpassw',$cpassw,time()+60*60*24*7);
$logueado=1;
}
}
else
{
setcookie('cuser','',time()-3600);
setcookie('cpassw','',time()-3600);
}
}
if($logcorrecto)
{
$cuser=$_POST['usuario'];
$cpassw=$_POST['passw'];
setcookie('cuser',$cusur,time()+60*60*24*7);
setcookie('cpassw',$cpassw,time()+60*60*24*7);
$logueado=1;
}
if($logout)
{
setcookie('cuser','',time()-3600);
setcookie('cpassw','',time()-3600);
}

?>

El problema ahora esque no se si hace bien lo del setcookie porque si refresco la pagina despues del login no se me keda como logueado y vuelve a ponerse el formulario

La cosa eske estoy en localhost con el xampp y no se si puede ser por eso el ke me falla o no.

Ando liadisimo con las cookies, please ayudarme!! Gracias
  #5 (permalink)  
Antiguo 07/06/2007, 03:57
 
Fecha de Ingreso: junio-2007
Mensajes: 41
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Problema cookies

Sigo liadisimo con este tema de las cookies, pero ahora me planteo otra duda.

Si hago un session_start cuando se loguea, y la termino cuando se desloguea, seguira siendo la misma sesion cada vez ke entre ala pagina, xq como tiene las cookies, hasta ke no se deslogue siempre ke entre a la pagina sera la misma sesion no??

Tambien keria saber lo que devuelve session_start() se ke es un 1 y un 0 pero no se cuando cada cual, supongo ke un 1 si inicia sesion y un 0 si recupera una sesion iniciada de antes.

Y por ejemplo en un contador de visitas x sesiones solo contaria una vez, x mucho ke entre a la pagina no??

y otra cosa, Cuanto tarda en desaparecer las cookies de la sesion?? y donde puedo cambiar ese tiempo??

Gracias

Última edición por Abe11; 07/06/2007 a las 04:09
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 02:23.