Foros del Web » Programando para Internet » PHP »

Problema leyendo cookies

Estas en el tema de Problema leyendo cookies en el foro de PHP en Foros del Web. Tengo un formulario de identificación que funciona con Cookies. El mecanismo es simple, tu pones tus datos y, si son válidos, se crea la cookie. ...
  #1 (permalink)  
Antiguo 16/05/2003, 09:39
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 15 años, 11 meses
Puntos: 17
Problema leyendo cookies

Tengo un formulario de identificación que funciona con Cookies.

El mecanismo es simple, tu pones tus datos y, si son válidos, se crea la cookie.

Para verificar que el usuario sea válido, miro que exista la cookie de este modo:

if (!isset($_COOKIE[id_usuari])) {

.. Aquí el formulario para identificarse.

} else {

.. Aquí el código "bueno".

}

El problema es que siempre tengo que ingresar dos veces. La primera vez que me identifico se crea la cookie, pero me muestra el formulario otra vez.

Es muy extraño, porque en el formulario he puesto esto:
<input type="text" size="10" name="iden" value="<?=$_COOKIE[id_usuari]?>">

Y, pese a considerar que $_COOKIE[id_usuari] no está definida, me muestra el valor en el input.

¿Alguien tiene alguna idea?
__________________
M a l d i t o F r i k i
  #2 (permalink)  
Antiguo 16/05/2003, 11:16
Avatar de Pino  
Fecha de Ingreso: abril-2003
Ubicación: Cangas do Morrazo, Pontevedra, Galicia, España, Europa, etc
Mensajes: 490
Antigüedad: 14 años, 7 meses
Puntos: 0
Hola, yo no tengo nidea pero por que no usas:
Código PHP:
$HTTP_COOKIE_VARS["id_usuari"]; 
fíjate en que $HTTP_COOKIE_VARS["id_usuario"]; solo funciona a partir de la versión 4.1.0 del php.

Supongo que este post a sido medio en valde, por que ya lo sabrías todo lo que dije.

Pero aun así un saludo
__________________
Pïno
Webmaster de Programas Lynx
Usuario Registrado de Linux #327681

Mi cuerpo en windows, pero mi mente pensando en linux.
  #3 (permalink)  
Antiguo 16/05/2003, 11:26
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 15 años, 11 meses
Puntos: 17
Ha dado la casualidad que si lo sabía, pero podría no haberlo sabido, con lo que está bien que lo recuerdes

Al final lo he "solucionado" de un método un poco cutre. Si alguien tiene alguna idea de lo que puede pasar, sería de mucha ayuda, ya que podría dejar el código un poco mejor
__________________
M a l d i t o F r i k i
  #4 (permalink)  
Antiguo 16/05/2003, 12:26
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Bueno .. mm las cookies y sesiones no quedan disponibles en los arrays asociados ($_COOKIE o $HTTP_COOKIE_VARS) hasta que no realizas la siguiente petición al servidor .. Esa "petición" se lo haces recargando una página .. o leyendo esa cookie en otra página ..

Si haces algo tipo:

<?
setcookie(...)

La primera vez te va a decir que NO está creada ..

If (isset($_COOKIE[...])){
// está creada la cookie
} else {
// No esta creada la cookie
}

?>

Lo "normal" sería que tu formulario de "login" enviase (el action) hacia tu script que valide tus datos de tu formulario y cree la cookie .. Tras terminar ese proces (como fin el setcookie() ..) haces un "header .. location" hacia tu "index" o donde tenga que entrar si se validó ...

Todo esto por supuesto puedes usarlo en un mismo script .. Sólo tendrias que usar variables de control para que tu lógica sepa en que proceso está (si "atuentificando" .. o lo que corresponda).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 16/05/2003, 12:34
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 15 años, 11 meses
Puntos: 17
Ajá. Eso explica muchas cosas

Gracias Cluster
__________________
M a l d i t o F r i k i
  #6 (permalink)  
Antiguo 16/05/2003, 12:42
Avatar de Pino  
Fecha de Ingreso: abril-2003
Ubicación: Cangas do Morrazo, Pontevedra, Galicia, España, Europa, etc
Mensajes: 490
Antigüedad: 14 años, 7 meses
Puntos: 0
Es una cosa rara que no le funcione. En mi web tengo como dice cluster.

1.- Envia el formulario

2.- en un pequeño script, comprueba el nombre de usuarios y contraseña en la base de datos

3.- Si hay alguna fila que tenga esos datos (así):
Código PHP:
if (mysql_num_rows($rs)!=0){ 
setcookie("paso","si",time()+3600); 
setcookie("usuario","$nick",time()+3600); 
    
header ("Location: usuarios_registrados.php"); 
}else { 
    
header("Location: index.php?error=si"); 

Y entonces en la página "usuarios_registrados.php" pongo así:
Código PHP:
if ($HTTP_COOKIE_VARS["paso"] == "si"){
// aqui el html
}
else
{
//aquí el html diciendo que no paso por el formulario de autentificación.

Bueno imagino que lo entendisteis, pero sigo sin entender por que no le va a el tal y como dijo al principio.

Un saludo
__________________
Pïno
Webmaster de Programas Lynx
Usuario Registrado de Linux #327681

Mi cuerpo en windows, pero mi mente pensando en linux.
  #7 (permalink)  
Antiguo 16/05/2003, 12:47
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pues Pino.. es probable que no esté haciendolo así Cain .. o esté intentando hacer lo que puse .. un setcookie y esperar en el mismo flujo del código leer la cookie para validarla ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 16/05/2003, 12:51
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 15 años, 11 meses
Puntos: 17
Exacto. Lo quería hacer todo de golpe

Pero bueno, ya lo he repartido en dos peticiones y todo está ok
__________________
M a l d i t o F r i k i
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 19:05.