Foros del Web » Programando para Internet » PHP »

Error: haciendo un "Recordar mis datos en otras visitas"

Estas en el tema de Error: haciendo un "Recordar mis datos en otras visitas" en el foro de PHP en Foros del Web. Hola amigos, tengo una funcion de php, la cuál crea una cookie o una session dependiendo de los datos insertados, pero me da el siguiente ...
  #1 (permalink)  
Antiguo 22/05/2004, 12:50
 
Fecha de Ingreso: agosto-2003
Ubicación: España
Mensajes: 202
Antigüedad: 14 años, 4 meses
Puntos: 0
Error: haciendo un "Recordar mis datos en otras visitas"

Hola amigos, tengo una funcion de php, la cuál crea una cookie o una session dependiendo de los datos insertados, pero me da el siguiente error:

Warning: session_start(): Cannot send session cookie - headers already sent by (output started at C:\Inetpub\wwwroot\zeolab\usuarios\perfil.php:15) in C:\Inetpub\wwwroot\zeolab\arc_otros\funciones.php on line 106

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at C:\Inetpub\wwwroot\zeolab\usuarios\perfil.php:15) in C:\Inetpub\wwwroot\zeolab\arc_otros\funciones.php on line 106



Código PHP:
function Login($user,$contrasena,$autolgn){
$ssql mysql_query("SELECT * FROM autores where identificador='$user' AND contrasena='$contrasena' ");
if(
$usrOK mysql_fetch_array($ssql)){
if(
$autolgn == "si"){
setcookie("usuario_zeolab_cookie",$user,time()+obtenerDatoCfg("cookie_expire"));
setcookie("contrasena_zeolab_cookie",$contrasena,time()+ obtenerDatoCfg("cookie_expire"));
}else{
//session start representa la linea 106
session_start();
session_register("usuario_zeolab_session");
session_register("contrasena_zeolab_session");
$_SESSION["usuario_almacenx"] = $user;
$_SESSION["contrasena_almacenx"] = $contrasena;

}
$rturn $PHP_SELF ."?modo=panel";
}else{
$rturn $PHP_SELF "?modo=login&error=si";
}
return 
$rturn;

Y bien amigos, pueden ayudarme con el problema?
Gracias de antemano
Adiós

Última edición por ivanguillen; 22/05/2004 a las 13:18
  #2 (permalink)  
Antiguo 22/05/2004, 12:59
Avatar de DjFaramir  
Fecha de Ingreso: febrero-2003
Ubicación: La Plata, Buenos Aires, Argentina
Mensajes: 131
Antigüedad: 14 años, 9 meses
Puntos: 0
pon todo ese codigo antes del <html> de la pagina...
__________________
See you... y Tolkien... mucho Tolkien...
  #3 (permalink)  
Antiguo 22/05/2004, 13:00
 
Fecha de Ingreso: noviembre-2003
Mensajes: 78
Antigüedad: 14 años
Puntos: 2
ivanguillen,

El mensaje de error de Headers Already Sent, indica que hay contenido resultante del script que ha sido enviado, antes de la llamada a las funciones de setcookie o session_start.

Debido a que el manejo de sesiones se realizar mediante cookies, y las mismas se envìan a los navegadores junto con el encabezado HTTP, y no con los contenidos, es requisito que estas funciones sean llamadas antes que cualquier otra funciòn que genere datos a pantalla.

Muchas veces el error es ocasionado por un simple salto de linea olvidado, o un error o warning de PHP que no llegamos a ver.

Probablemente sea posible identificar el error viendo el còdigo de, al menos las primeras 15-20 lineas, de perfil.php

Espero que te sirva la información.

Saludos!
__________________
Joel A. Chornik
ELSERVER.COM - WebHosting Profesional
  #4 (permalink)  
Antiguo 22/05/2004, 13:05
 
Fecha de Ingreso: agosto-2003
Ubicación: España
Mensajes: 202
Antigüedad: 14 años, 4 meses
Puntos: 0
Pos las primeras veinte lineas:
<?php include('../config.php'); ?>
<?php include('../arc_otros/funciones.php'); ?>
<?php
$modo = $_GET['modo'];
$idu = $_GET['id'];
$usr = obtenerNickName($id);
if($modo == "nuevo"){
$title = "Registro de Usuarios";
}elseif($modo == "perfil"){
$title = "Perfil de Usuario - $usr ";
}elseif($modo == "login"){
$title = "Identificación ";
}
?>
<HTML><HEAD><TITLE><?php echo verTitulo(); ?>: <?php echo $title; ?></TITLE>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<LINK href="../archivos/estilo.css" type=text/css rel=stylesheet>
</HEAD>
<BODY
onmouseover="window.status='<?php echo verStatus(); ?>';return true"
  #5 (permalink)  
Antiguo 22/05/2004, 13:10
 
Fecha de Ingreso: noviembre-2003
Mensajes: 78
Antigüedad: 14 años
Puntos: 2
ivangullen,

Deberìas entonces cambiar tu còdigo para que la llamada a la funcion Login() (la llamada, no la declaración, que está ok) ocurra antes del HTML del sitio.

Es decir antes de: <HTML><HEAD><TITLE><?php echo [...]

Saludos,
__________________
Joel A. Chornik
ELSERVER.COM - WebHosting Profesional
  #6 (permalink)  
Antiguo 22/05/2004, 13:12
 
Fecha de Ingreso: agosto-2003
Ubicación: España
Mensajes: 202
Antigüedad: 14 años, 4 meses
Puntos: 0
Gracias..., Espero que pueda hacer eso...
Jeje
  #7 (permalink)  
Antiguo 22/05/2004, 13:15
 
Fecha de Ingreso: noviembre-2003
Mensajes: 78
Antigüedad: 14 años
Puntos: 2
:)

Si no tienes inconveniente, envíame el código completo por e-mail y con gusto lo reviso.

Saludos!
__________________
Joel A. Chornik
ELSERVER.COM - WebHosting Profesional
  #8 (permalink)  
Antiguo 22/05/2004, 13:17
 
Fecha de Ingreso: agosto-2003
Ubicación: España
Mensajes: 202
Antigüedad: 14 años, 4 meses
Puntos: 0
Ya lo tengo bien :) jejeje
No es necesario, pero gracias por tu ayuda...
jejejej
bye
  #9 (permalink)  
Antiguo 22/05/2004, 13:17
 
Fecha de Ingreso: agosto-2003
Ubicación: España
Mensajes: 202
Antigüedad: 14 años, 4 meses
Puntos: 0
Ya lo tengo bien :) jejeje
No es necesario, pero gracias por tu ayuda...
jejejej
bye
  #10 (permalink)  
Antiguo 22/05/2004, 13:19
 
Fecha de Ingreso: noviembre-2003
Mensajes: 78
Antigüedad: 14 años
Puntos: 2
Me alegro.

Cualquier cosa que precises, el foro está para ayudar :)
__________________
Joel A. Chornik
ELSERVER.COM - WebHosting Profesional
  #11 (permalink)  
Antiguo 22/05/2004, 15:46
Avatar de Gerald  
Fecha de Ingreso: julio-2003
Mensajes: 1.356
Antigüedad: 14 años, 5 meses
Puntos: 2
No estaria de mas

Que encriptaras la contraseña y eso enviaras a la cookie, pues de la manera que tienes es muy peligrosa
usa el buscador del foro y busca por md5 y veras como se usa
www.php.net/md5
__________________
Solo por Hoy: Trataré de fortalecer mi mente. Estudiaré y aprenderé algo útil
Hoteldipity
Arte Caracol
  #12 (permalink)  
Antiguo 22/05/2004, 16:26
Avatar de sdf23  
Fecha de Ingreso: diciembre-2002
Mensajes: 297
Antigüedad: 15 años
Puntos: 0
pues...
__________________

la vida es bella cuando no es culera
  #13 (permalink)  
Antiguo 23/05/2004, 00:30
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Y no mezclar en el uso de sesiones:

session_register() con los arrays superglobales: $_SESSION ..

O se usa uno u otro método para trabajar con sesiones .. pero no mezclados (recomendable usar -sólo- $_SESSION (si se usa PHP 4.1.0 en adelante).

Lo miso es aplicable para $PHP_SELF .. usar $_SERVER['PHP_SELF'] .. (hay unas FAQ's que hablan del tema en el foro PHP (de las primeras).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #14 (permalink)  
Antiguo 23/05/2004, 03:04
 
Fecha de Ingreso: agosto-2003
Ubicación: España
Mensajes: 202
Antigüedad: 14 años, 4 meses
Puntos: 0
el script no es para mi...
me han pedido esas características
Ya conozco MD5...
Gracias a todos por vuestra colaboración
  #15 (permalink)  
Antiguo 08/06/2004, 10:11
 
Fecha de Ingreso: febrero-2004
Mensajes: 65
Antigüedad: 13 años, 9 meses
Puntos: 0
cookies php

yo tengo el mismo problema, pero tengo 2 archivos, el primero envia el formulario y luego grabo la cookie. pero sigue mostrando el mismo error.

primera.php

<?
if (!isset($_COOKIE['cookie_usuario'])){
echo "NO HAY COOKIE POR LO QUE MUESTRO EL FORM DE INGRESO";
?>
<html>
<head>
</head>
<body>
<form method="POST" action="segunda.php">
<br><br>
<center><h1>Cookies </h1>
<Center>
usuario = guillermo <br> clave = 12345678<br>
<table border="0" width="auto">
<tr>
<td width="33%">Nombre de usuario</td>
<td width="33%"><input type="text" name="nombre" size="20"></td>
<td width="34%">&nbsp;</td>
</tr>
<tr>
<td width="33%">Clave</td>
<td width="33%"><input type="password" name="clave" size="20"></td>
<td width="34%"><input type="checkbox" name="recordar" value="SI">recordar mis datos</td>
</tr>
</table>
<center>
<p><input type="submit" value="Submit" name="sub">
<input type="reset" value="Reset" name="res"></p>
</center>
</form>
</body>
</html>
<? }
else
{
$cookie_usuario = explode("-", $_COOKIE['cookie_usuario']); //Extraer los datos
$nombre = $cookie_usuario[0];
$clave = $cookie_usuario[1];
echo "<center>Bienvenido otra vez $nombre - su clave es<br> $clave <br>";
echo "<a href='salir.php'>Salir</a>";
exit;
}
?>

segunda.php

<?
if(empty($_POST['nombre']) || empty($_POST['clave']))
{ ?>
<b>Complete todos los campos</b>
<? exit;
}
else
{
$time = time();
$nombre_usuario = "guillermo";
$clave_usuario = "12345678";
$check = $_POST['recordar'];
if (($nombre_usuario == $_POST['nombre']) &&($clave_usuario == $_POST['clave']))
{
echo "<font size=2>";
echo "<br>ok, los valores ingresados en el form de index.php coinciden con los de nombre de usuario y clave <br>";
echo "Este es un ejemplo básico para un solo usuario (\$nombre_usuario - \$clave_usuario),<br>para multiples usuarios conviene conectar a una base de datos MySql";
echo "<br><br><hr></font>";
$cookie_data = $nombre.'-'.$clave;
if($check=='SI')
{
if(setcookie ("cookie_usuario",$cookie_data, $time+600)==TRUE)
{
echo "<font size=2>";
echo "El valor \"recordar\" del form esta en SI<br>Cookie GUARDADA <br><b>".$cookie_data . "</b>"; ?>
<br><br><a href='salir.php'>Salir</a> </font>
<? }
}
}
else
{
echo "Usuario y/o clave inválidos";
exit;
}

}
?>
  #16 (permalink)  
Antiguo 12/06/2004, 11:07
 
Fecha de Ingreso: agosto-2003
Ubicación: España
Mensajes: 202
Antigüedad: 14 años, 4 meses
Puntos: 0
Lo que decías CLUSTER del $_SERVER[$PHP_SELF], no presenta ningun problema, si anteriormente defines global $PHP_SELF, lo prefiero , además, veo que estais todos muy generosos, yo solo pregunte una cosa, no soy nuevo en php, solo tuve una duda, ya se lo de md5, como usar sessiones, como usar cookies etc.
Adiós y gracias como siempre
  #17 (permalink)  
Antiguo 14/06/2004, 08:22
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Ok, .. el caso es que aquí no nos conocemos (yo no sé lo que tu sabes y tu tampoco lo que los demás saben) .. así que no está de más a veces refrescar o aconsejar cosas que tal vez tu ya "dominas".

Lo que comentas de definir como global $PHP_SELF .. estás asumiendo ahí que se usar register_globals a ON simpre y eso no es así (y no deberías usarlo por seguridad) .. Usa los arrays superglobales y sus indices correctos. Por lo demás .. por el código que pusistes sobre sesiones, no es correcto el uso que haces "pese" que te funcione si lees la documentación oficial de PHP (he de ahí mi comentario al respecto) .. Ahora tu decidiras.

Un saludo,
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 17:48.