Foros del Web » Programando para Internet » PHP »

Problema con cookies

Estas en el tema de Problema con cookies en el foro de PHP en Foros del Web. Buenas a todos. Acabo de registrarme porque normalmente me limito a buscar problemas similares al que yo tengo, pero este problema me está trayendo de ...
  #1 (permalink)  
Antiguo 03/03/2008, 16:26
Avatar de Ryo
Ryo
 
Fecha de Ingreso: marzo-2008
Ubicación: Bilbao
Mensajes: 269
Antigüedad: 16 años, 1 mes
Puntos: 14
Problema con cookies

Buenas a todos. Acabo de registrarme porque normalmente me limito a buscar problemas similares al que yo tengo, pero este problema me está trayendo de cabeza, así que he decidido crear yo un tema explicando lo que me pasa.

Estoy tratando de que mi página ofrezca la posibilidad de recordar a los usuarios que se identifican en ella, para lo que estoy usando cookies. El caso es que parece que funcione sólo cuando le da la gana. A veces me identifico y al cerrar el navegador (es decir, al terminar la sesión) y al volver a entrar en la página me recuerda, independientemente de que yo elija que me recuerde o no, mientras que otras veces hace justo lo contrario: no importa lo que yo elija, nunca me recuerda. Todo eso sin cambiar el código en lo más mínimo. He visto que los setcookie no estaban arriba del todo (aunque estaban en el head), así que he decidido ponerlo arriba y hasta ahora el resultado es que no me recuerda nunca.

Voy a poner el código que interesa (cualquier parte en la que haga algo con cookies) en orden de ejecución:

1. Crear las cookies si se elige la opción de recordar.
Código PHP:
if (isset($_POST['recordar'])) {
    
setcookie('logueado'$_SESSION['logueado'], time() + 3600*24*100''''0);
    
setcookie('nombreU'$_SESSION['nombreU'], time() + 3600*24*100''''0);

2. Comprobar si el usuario se ha desintificado.
Código PHP:
if (isset($_POST['salir'])) {
    
$_SESSION['logueado']=false;
    unset(
$_COOKIE['logueado']);
    unset(
$_COOKIE['nombreU']);

3. Comprobar si el menú debe mostrar la sección de login o el panel de usuario.
Código PHP:
<?php
if (!$_SESSION['logueado'] && !$_COOKIE['logueado']) {
    include(
"menuder/login.php");
    if (!
$log && isset($_POST['logsend'])) {
    
?>
        <script type="text/javascript">
        falloLogin();
        </script>
    <?php
    
}
}
else {
    include(
"menuder/panel.php");
}
?>
4. Si entra en el panel de usuario, coge los datos de la variable $_COOKIE si ha decidido ser recordado y de $_SESSION si no.
Código PHP:
if ($_COOKIE['logueado']) {
    
$sql="SELECT * FROM usuario WHERE uname='".$_COOKIE['nombreU']."'";
}
else {
    
$sql="SELECT * FROM usuario WHERE uname='".$_SESSION['nombreU']."'";

Por otro lado pongo la función que hace el login, para comprender mejor algunas variables que aparecen arriba.
Código PHP:
function loguear($datosU) {
    
// Conexión con la BD
    
Esto está bienno hace falta que lo ponga :P
    
    
// Se recogen los datos de la BD
    
$sql="SELECT * FROM usuario WHERE uname='".$datosU['nombreU']."'";
    
$res=mysql_query($sql,$link);
    
    
// Se comprueba si el usuario existe
    
if (!($usuario=mysql_fetch_assoc($res))) {
        
$correcto=0;
    }
    else {
        if (
$usuario['pass']==$datosU['contraU']) {
            
$correcto=1;
            
$_SESSION['nombreU']=$usuario['uname'];
            
$_SESSION['logueado']=true;
        }
        else {
            
$correcto=0;
        }
    }

A ver si a alguien me puede decir qué hago mal, porque me estoy volviendo loco

Última edición por Ryo; 03/03/2008 a las 16:36
  #2 (permalink)  
Antiguo 03/03/2008, 17:18
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 1 mes
Puntos: 52
Re: Problema con cookies

prueba a cerrar a si la sesion

Código PHP:

<?php

//este archivo se llama salir.php

session_start();
// Borramos toda la sesion
session_destroy();
//el siguiente script es de java, redirecciona
?>
<SCRIPT LANGUAGE="javascript">
location.href = "principal.php";
</SCRIPT>
igual te va mejor que, borrando las cookies
como haces aqui.



Código PHP:

if (isset($_POST['salir'])) {
    
$_SESSION['logueado']=false;
    unset(
$_COOKIE['logueado']);
    unset(
$_COOKIE['nombreU']); 
  #3 (permalink)  
Antiguo 05/03/2008, 06:05
Avatar de Ryo
Ryo
 
Fecha de Ingreso: marzo-2008
Ubicación: Bilbao
Mensajes: 269
Antigüedad: 16 años, 1 mes
Puntos: 14
Re: Problema con cookies

Gracias por intentar ayudarme, pero esa solución no me sirve.

Ahora parece que he conseguido que las cookies se creen sólo cuando deben crearse y que recuerden al usuario (el orden de una cosa estaba mal, por lo demás el código no ha sido modificado), pero lo que no consigo de ninguna manera es borrar esas cookies.

Voy a poner los resultados usando distintas cosas.

Usando sólo sesiones:
Ningún problema, pero no quiero que los usuarios tengan que identificarse cada vez que entren en mi página.

Usando cookies:
Agruparé las "soluciones" en dos grupos, según el resultado.

1. Al darle a "Salir" el usuario aparece como desindetificado y se ve el menu de identificación, pero si cambio de página o cierro el navegador (y por tanto la sesión) y vuelvo a entrar la página me recuerda, aunque yo no quiera. Eso me pasa usando unset($_COOKIE['logueado']); o $_COOKIE['logueado']=false;.

2. Cualquier otra forma es peor aún (setcookie con valor false, setcookie con fecha de expiración en un tiempo ya pasado...). No sólo me recuerda, sino que en ningún momento "sale" cuando le doy a "Salir".

La única manera en la que la página me olvida es borrando manualmente las cookies. ¿Alguien sabe por qué ninguna solución me funciona? ¿Qué puedo hacer para borrar las cookies?
  #4 (permalink)  
Antiguo 05/03/2008, 06:26
 
Fecha de Ingreso: marzo-2008
Ubicación: Buenos Aires
Mensajes: 86
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Problema con cookies

Para borrar la cookie, la llamada a setcookie debe ser igual que la que la creó, pero con el valor en blanco, "" (comillas comillas). No haciendo unset($_COOKIE).

Toda llamada a setcookie, tanto para crear como para borrar una cookie, debe ir en el codigo antes de enviar cualquier salida al navegador.

Espero que esto te ayude.

-ronnieb
  #5 (permalink)  
Antiguo 05/03/2008, 12:13
Avatar de Ryo
Ryo
 
Fecha de Ingreso: marzo-2008
Ubicación: Bilbao
Mensajes: 269
Antigüedad: 16 años, 1 mes
Puntos: 14
Re: Problema con cookies

Gracias, ronnieb, lo que me fallaba es que no borraba las cookies al principio.

De todas formas, sigue ocurriendo algo extraño que de momento soluciono con un parche: cuando le doy a salir me sigue saliendo el panel de usuario y no es hasta que le doy a algún enlace, actualizo o lo que sea que realmente parece que me haya desintificado. Por orden de ejecución no puede ser, porque las cookies se borran al principio. De momento lo he solucionado haciendo un unset de la cookie después de borrarlas, pero si alguien me dice cómo puedo solucionarlo de forma menos chapucera soy todo oídos.
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:39.