Foros del Web » Programando para Internet » PHP »

Ayuda y explicacion de las cookies

Estas en el tema de Ayuda y explicacion de las cookies en el foro de PHP en Foros del Web. Saludos ... este es unmensaje largo Estoy validando usuarios con php en una pagina que se recarga asi misma y se me presenta un problema ...
  #1 (permalink)  
Antiguo 30/09/2005, 09:28
 
Fecha de Ingreso: noviembre-2002
Mensajes: 112
Antigüedad: 15 años
Puntos: 0
Ayuda y explicacion de las cookies

Saludos ... este es unmensaje largo

Estoy validando usuarios con php en una pagina que se recarga asi misma y se me presenta un problema con las cookies, he leido los posts pero aun no me queda claro el funcionamiento de las mismas.
Inicio normal con html, de esta manera

<html>
<head>
<title>Documentos </title>

<script language="javascript" type="text/javascript">
if(document.getElementById){
document.write('<link rel="stylesheet" href="comun/css/comp.css" type="text/css" media="screen">');
document.write('<link rel="stylesheet" href="comun/css/print.css" type="text/css" media="print">');
}
</script>
<link rel="stylesheet" href="comun/css/otros.css" type="text/css">


<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
etc...


Utilizo hojas estilo para el dise#o de lapagina, y mucho mas adelante valido usuarios ademas uso javascript para ciertos mensajes y despues aparece este codigo, asi:

<?php

// linea para eliminar
include("bdconexion.php");
// $GLOBALS['usuario_id'] = $_COOKIE['usuario_id'];

// Verificacion si se envio la informacion del usuario
if($_POST['submit']) {
// Verificar nombre de usuario
$usuario = $_POST['username'];
$clave = $_POST['password'];
// Buscar en la base de datos el usuario
$usuario_id = validaUsuario($usuario,$clave);


if ($usuario_id != '') {
//crea la cookie
setcookie("usuario_id",$usuario_id, time()+(60*60*24*365*10),"/");
} else {
// Si no se encuentra el usuario
print("Datos Incorrectos");
}
}
if (empty ($usuario_id)){
// Muesta las cajas para introducir el usr y su clave
............. etc .......


Esto si funciona pero hay un inconveniente me la advertencia :



Warning: Cannot modify header information - headers already sent by (output started at /opt/apache/htdocs/base/barraIzquierda.php:5) in /opt/hpws/apache/htdocs/base/barraIzquierda.php on line 148



Efectivamente mi archivo se llama barraIzquierda y la linea 5 es donde dice <script language="javascript" ..... y hace referencia a la linea 148 que donde realmente se declara la cookie (que esta con un color diferente), si pongo al inicio de mi programa una cookie con un valor, no marca esta advertencia pero ese valor seria siempre el mismo cada vez que acceda a la pagina y no es el objetivo sino que sea el valor segun el nombre del usuario ....

He visto que aparecen problemas de cookies por espacios en blancos para eliminar este error, pero veo que este no es el caso, la cookie la creo despues de una condicion mas o menos en medio del programa pero no entiendo porque hay que poner una cookie al inicio del programa ....

Por favor necesito de su valiosa ayuda...

Gracias...
  #2 (permalink)  
Antiguo 30/09/2005, 09:42
 
Fecha de Ingreso: mayo-2004
Mensajes: 393
Antigüedad: 13 años, 7 meses
Puntos: 0
Noentiendo demasiado de cookies porque no las uso.

Pero no veo ningún problema en crearla al principio. En definitiva, a la página te llega la variable $usuario_id que quieres utilizar en la cookie. Yo creo que deberías crearla, y enviarla para después hacer la validación del usuario. De este modo el problema que comentas desaparece y tu script hace lo que pretendes que haga. Lo único que pasa es que si un usuario se equivoca de clave, recibirá la cookie, pero quizá haya un sistema de destruirla en estos casos si crees que es necesario.

Saludos.
  #3 (permalink)  
Antiguo 30/09/2005, 09:48
BKT
 
Fecha de Ingreso: septiembre-2005
Mensajes: 5
Antigüedad: 12 años, 2 meses
Puntos: 0
Tienes configurado el uso de cookies en el server???, si no me equivoco en el php.ini
  #4 (permalink)  
Antiguo 30/09/2005, 11:06
 
Fecha de Ingreso: noviembre-2002
Mensajes: 112
Antigüedad: 15 años
Puntos: 0
Si tengo configurado las cookies ...
Javito, pero lo que pretendo es que cuando el usuario regrese a la pagina , si existe la cookie entonces se autologee automaticamente y si creo al principio del programa una cookie con un valor entonces ya no ocurrira esto.

Que puedo hacer al respecto? ...
  #5 (permalink)  
Antiguo 01/10/2005, 07:34
 
Fecha de Ingreso: agosto-2005
Mensajes: 3
Antigüedad: 12 años, 4 meses
Puntos: 0
Las cookies forman parte de la cabecera http

Hola,
realmente es necesario que las cookies sean lo primero que se establece en una página php. Te explico: las cookies forman parte de la cabecera de una página html con lo que deben ir antes de cualquier código html.
En tu caso, puedes hacer varias cosas para evitar el problema.
1. Montar el código html en una variable que alfinal o cuando tú quieras muestras al browser:
$html = "<html><head>bla bla bla.....";
....
$html .= "<table><tr>lo que sea bla bla .....";

Ahora validación de usuario con cookies + establecer cookies
y después tachán! :
echo $html;

2. También puedes montar la validación de los usuarios al principio de la página php que es lo más elegante/óptimo.

Si te puedo ayudar más dímelo.
Un saludo

PW
http://jcasamitjana.blogspot.com/
  #6 (permalink)  
Antiguo 01/10/2005, 19:04
 
Fecha de Ingreso: noviembre-2002
Mensajes: 112
Antigüedad: 15 años
Puntos: 0
Muchas gracias jcasamitjana eres un genio de hecho tienes toda la razon debido a que antes que haya una salida a la pantalla debe declararse la cookie y tienes toda la razon, hice la validacion de los usuarios al inicio de mi pagina y ahora funciona de maravilla.

Muchas gracias.
  #7 (permalink)  
Antiguo 22/10/2005, 13:54
Avatar de MoDoRrO  
Fecha de Ingreso: septiembre-2005
Ubicación: Php+Flash+AS
Mensajes: 1.072
Antigüedad: 12 años, 2 meses
Puntos: 12
ME PUEDESA PASAR EL CODIGO???
O SEA CUANDO LA DECLARAS, CUANDO LA GUARDAS Y CUANDO LA UTILIZAS??
sALUDOS Y GRACIASS
:ADIOS:
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 22:07.