Foros del Web » Programando para Internet » PHP »

Cookiesssssssss, noooooooooooo...¡¡¡¡

Estas en el tema de Cookiesssssssss, noooooooooooo...¡¡¡¡ en el foro de PHP en Foros del Web. Este es el codigo. Mis preguntas son: - si cada vez que entro a esta pagina seteo el setcookie, nunca deberia mostrarme el form pero ...
  #1 (permalink)  
Antiguo 24/12/2003, 12:01
 
Fecha de Ingreso: diciembre-2003
Mensajes: 148
Antigüedad: 20 años, 4 meses
Puntos: 0
Cookiesssssssss, noooooooooooo...¡¡¡¡

Este es el codigo. Mis preguntas son:
- si cada vez que entro a esta pagina seteo el setcookie, nunca deberia mostrarme el form pero si lo hace, cuando culmina el tiempo del cookie.
- cuando aparece el form quiere decir que $HTTP_COOKIE_VARS["user"] no existe, pero abro otra pagina y llamo a esa misma pagina y parece habetr seteado el cookie de nuevo.


Código PHP:
<?php setcookie("user","Carlos",time()+ 60);    
?>
<html>
<body>

<?php 
  
if (!isset($HTTP_COOKIE_VARS["user"]))
    {
?>
<form name="frmNombre" method="POST" action="cookie.php">
<table>
    <tr>
        <td>Nombre:</td>
        <td><input type="text" name="txtNombre"></td>
    </tr>
</table>

<input type="submit" name="btnSubmit" value="Registrar">
</form>

<?php }
else
{
 echo 
"<h1>Usuario Registrado</h1>";
 echo 
"<br><h2>Bienvenido "$HTTP_COOKIE_VARS["user"] ."</h2>";
}
?>
</body>
</html>
  #2 (permalink)  
Antiguo 24/12/2003, 15:41
Avatar de José Molina  
Fecha de Ingreso: enero-2002
Ubicación: USA
Mensajes: 768
Antigüedad: 22 años, 3 meses
Puntos: 1
Una Idea

Saludos Rubencin.

Tienes que enviar el cookie, despues que envien los datos desde el formulario. Así como lo tienes estas enviando el cookie a la PC cada vez que cargas la página.

EJ:


Código PHP:
<html>
<body>

<?php
if  ($_POST['PASO'] == 1) { 
   
setcookie("user","Carlos",time()+ 60); 
}
   
if (!isset(
$HTTP_COOKIE_VARS["user"])) {
?>

<form name="frmNombre" method="POST" action="cookie.php">
<table>
    <tr>
        <td>Nombre:</td>
        <td><input type="text" name="txtNombre"></td>
    </tr>
</table>

<input type="submit" name="btnSubmit" value="Registrar">
<INPUT TYPE="hidden" NAME="PASO" VALUE="1">

</form>

<?php 
}else{
 echo 
"<h1>Usuario Registrado</h1>";
 echo 
"<br><h2>Bienvenido "$HTTP_COOKIE_VARS["user"] ."</h2>";
}
?>

</body>
</html>
Suerte
__________________
José Molina
La marginalidad no esta en la incapacidad de calmar el hambre de un estómago sino en la incapacidad de calmar el hambre de la mente.

Última edición por José Molina; 24/12/2003 a las 15:45
  #3 (permalink)  
Antiguo 24/12/2003, 23:14
 
Fecha de Ingreso: diciembre-2003
Mensajes: 148
Antigüedad: 20 años, 4 meses
Puntos: 0
Re: Una Idea

Hola Jose que tal, el codigo q me diste es algo parecido al q hice pero lo q pasa es que me genera un warning de cannot modify header information, es porque no debe haber espacios ni cosas como echo, o tags de html antes ese es el problema, como hago eso????

Saludos
Rubén
  #4 (permalink)  
Antiguo 26/12/2003, 06:37
Avatar de José Molina  
Fecha de Ingreso: enero-2002
Ubicación: USA
Mensajes: 768
Antigüedad: 22 años, 3 meses
Puntos: 1
Sólo al enviar cookie

Saludos

Bueno, ese problema ocurre sólo cuando intentas enviar el cookie, porque para leer no deberías tener mayor inconveniente. Se me ocurren 2 soluciones:

1) Levanta un pop-up con el resultado de la votación y luego envias el cookie desde ese mismo pop-up.

2) Colocas esto en el archivo php donde quieres enviar el cookie:

Código PHP:
    ob_start();
    <
codigo de todo el html php>
    
ob_end_flush(); 
Suerte
__________________
José Molina
La marginalidad no esta en la incapacidad de calmar el hambre de un estómago sino en la incapacidad de calmar el hambre de la mente.

Última edición por José Molina; 26/12/2003 a las 06:38
  #5 (permalink)  
Antiguo 26/12/2003, 21:39
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Ese es el problema de andar incrustando el php dentro del html... la opción de José Molina que utiliza el ob_start()... es la salida fácil y, en mi opinión, perezosa. Es verdad que funciona, pero es la más costosa en cuanto a recursos del servidor (utiliza el buscador de este foro y obtendrás más información)...

Lo mejor es hacer un código más limpio, separando los procesos de las salidas... por ponerte un pequeño ejemplo, puedes tener el setcookie fuera de ese script. Sería algo así:
Código PHP:
<?php
if  ($_POST['PASO'] == 1) { 
   
header('location: setearcookie.php');//En lugar de setear la cookie directamente, redireccionamos al script que lo hará
}
   
if (!isset(
$HTTP_COOKIE_VARS["user"])) {
?>
]<html>
<body>

<form name="frmNombre" method="POST" action="cookie.php">
<table>
    <tr>
        <td>Nombre:</........
Y tendrás que tener un archivo llamado 'setearcookie.php' que contendrá el set cookie y una redirección a la página que quieras...

De esa manera no tendrás que utilizar el ob_start() ni nada parecido...

Saludos

Última edición por jpinedo; 26/12/2003 a las 21:49
  #6 (permalink)  
Antiguo 27/12/2003, 15:55
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

La cookie creada con setcookie() esta disponible en la proxima pagina que crees, no en el mismo script que crea la cookie. Asi que cuando ejecutas ese script con la cookie caducada, se muestra el formulario y se crea la cookie, que esta disponible en la siguiente carga de cualquier pagina.

Eso es porque las cookies se crean en el cliente. Cuando haces un setcookie(), lo unico que haces es decir a PHP que envie junto con el HTML unas cabeceras que digan al navegador que cree una cookie, la cual sera enviada en posteriores peticiones.

Por eso despues de setear la cookie tienes que hacer una redireccion para que te reconozca la cookie.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #7 (permalink)  
Antiguo 30/12/2003, 06:10
Avatar de José Molina  
Fecha de Ingreso: enero-2002
Ubicación: USA
Mensajes: 768
Antigüedad: 22 años, 3 meses
Puntos: 1
Saludos.

Creo que esa fue mi 1) opción

Suerte
__________________
José Molina
La marginalidad no esta en la incapacidad de calmar el hambre de un estómago sino en la incapacidad de calmar el hambre de la mente.
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 03:35.